LookPlays

OpenSource Fisch Lunor

Mar 1st, 2025
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 333.58 KB | Gaming | 0 0
  1. -- all dependencies backed up by 25ms :>
  2. local lib = loadstring(game:HttpGet("https://you.whimper.xyz/sources/lunor/Backup/Backend/ObfuscatedSource"))()
  3. local FlagsManager = loadstring(game:HttpGet("https://you.whimper.xyz/sources/lunor/Backup/Backend/ObfuscatedConfigSource"))()
  4.  
  5. -- print = function() end
  6. -- warn = function() end
  7. -- local PreventSkidsToMakeGayThings = loadstring(game:HttpGet("https://raw.githubusercontent.com/Hosvile/InfiniX/main/Library/Anti/AntiDebug/main.lua", true))()
  8.  
  9. -- if not (type(PreventSkidsToMakeGayThings) == "table") then
  10. --   while true do end
  11. -- end
  12.  
  13. if not isfile('Lunor_Trans.png') then
  14.     writefile("Lunor_Trans.png", game:HttpGet('https://you.whimper.xyz/sources/lunor/Backup/Lunor_Trans.png'))
  15. end
  16.  
  17. local GetService,cloneref=game.GetService,cloneref or function(r)return r end
  18. local services=setmetatable({},{
  19.     __index=function(self,service)
  20.         local r=cloneref(GetService(game,service))
  21.         self[service]=r
  22.         return r
  23.     end
  24. })
  25. local genv = getgenv and getgenv() or shared or _G or {}
  26.  
  27. local LRM_UserNote = "Owner" -- Debugging Purpose Only
  28. local LRM_ScriptVersion = "v0030" -- Debugging Purpose Only
  29.  
  30. --[[Please Commnet When you are about to upload]]--
  31. local function RoleChecker()
  32.     if string.find(LRM_UserNote, "Ad Reward") then
  33.         return "Free Version"
  34.     elseif string.find(LRM_UserNote, "Premium") then
  35.         return "Premium Version"
  36.     elseif string.find(LRM_UserNote, "Owner") then
  37.         return "Dev Version"
  38.     else
  39.         return "No Role Assigned"
  40.     end
  41. end
  42.  
  43. local function formatVersion(version)
  44.     local formattedVersion = "v" .. version:sub(2):gsub(".", "%0.") -- Keep 'v' and add dot between digits
  45.     return formattedVersion:sub(1, #formattedVersion - 1) -- Remove last dot
  46. end
  47.  
  48. local function interpolate_color(color1, color2, t)
  49.     local r = math.floor((1 - t) * color1[1] + t * color2[1])
  50.     local g = math.floor((1 - t) * color1[2] + t * color2[2])
  51.     local b = math.floor((1 - t) * color1[3] + t * color2[3])
  52.     return string.format("#%02x%02x%02x", r, g, b)
  53. end
  54.  
  55. local function hex_to_rgb(hex)
  56.     return {
  57.         tonumber(hex:sub(1, 2), 16),
  58.         tonumber(hex:sub(3, 4), 16),
  59.         tonumber(hex:sub(5, 6), 16)
  60.     }
  61. end
  62.  
  63. local function gradient(word)
  64.     if not word or #word == 0 then
  65.         return "Error"
  66.     end
  67.  
  68.     if genv.GradientColor == nil then
  69.         start_color = hex_to_rgb("ea00ff")
  70.         end_color = hex_to_rgb("5700ff")
  71.     else
  72.         -- print(genv.GradientColor.startingColor, genv.GradientColor.endingColor)
  73.         start_color = hex_to_rgb(genv.GradientColor.startingColor)
  74.         end_color = hex_to_rgb(genv.GradientColor.endingColor)
  75.     end
  76.  
  77.     local gradient_word = ""
  78.     local word_len = #word
  79.     local step = 1.0 / math.max(word_len - 1, 1)
  80.  
  81.     for i = 1, word_len do
  82.         local t = step * (i - 1)
  83.         local color = interpolate_color(start_color, end_color, t)
  84.         gradient_word = gradient_word .. string.format('<font color="%s">%s</font>', color, word:sub(i, i))
  85.     end
  86.  
  87.     return gradient_word
  88. end
  89.  
  90. -- Example usage
  91. -- print(gradient("Hello"))
  92. local function getLunorIcon()
  93.     local asset
  94.     local success, product = pcall(function()
  95.         return getcustomasset(readfile('Lunor_Trans2.png'))
  96.     end)
  97.  
  98.     if not success or identifyexecutor():find("Cryptic") then
  99.         asset = "http://www.roblox.com/asset/?id=115594743966251"
  100.     else
  101.         asset = product
  102.     end
  103.     return asset
  104. end
  105.  
  106. local main = lib:Load({
  107.     Title = 'Fisch '..formatVersion(LRM_ScriptVersion)..' | ' .. gradient("discord.gg/lunor").. " | ".. RoleChecker(),
  108.     KeyAuth = "3itx_49ckx39",
  109.     ToggleButton = getLunorIcon()
  110. })
  111.  
  112.  
  113.  
  114. local tabs = {
  115.     Main = main:AddTab("Main"),
  116.     AutoFarm = main:AddTab("Auto Farm"),
  117.     Items = main:AddTab("Items"),
  118.     Teleporation = main:AddTab("Teleports"),
  119.     Misc = main:AddTab("Misc"),
  120.     Webhook = main:AddTab("Webhook"),
  121.     Visuals = main:AddTab("Visuals"),
  122.     Config = main:AddTab("Configs")
  123. }
  124. main:SelectTab()
  125.  
  126.  
  127.  
  128. local sections = {
  129.     Welcome = tabs.Main:AddSection({Defualt = true , Locked = true}),
  130.     -- FishPremium = tabs.AutoFarm:AddSection({Title = gradient("Premium - Rod Exploit"), Description = "", Defualt = false , Locked = false}),
  131.     Fish = tabs.AutoFarm:AddSection({Title = gradient("Auto Fishing"), Description = "", Defualt = true , Locked = false}),
  132.     FishPlus = tabs.AutoFarm:AddSection({Title = gradient("Advanced Auto Fish"), Description = "", Defualt = false , Locked = false}),
  133.     FishBait = tabs.AutoFarm:AddSection({Title = gradient("Baits"), Description = "", Defualt = false , Locked = false}),
  134.     -- FishSell = tabs.AutoFarm:AddSection({Title = gradient("Selling"), Description = "", Defualt = false , Locked = false}),
  135.     Webhook1 = tabs.Webhook:AddSection({Title = gradient(""), Description = "", Defualt = true , Locked = true}),
  136.     Webhook2 = tabs.Webhook:AddSection({Title = gradient("Webhook Settings"), Description = "", Defualt = true , Locked = false}),
  137.     Webhook3 = tabs.Webhook:AddSection({Title = gradient("Start Webhooks"), Description = "", Defualt = true , Locked = false}),
  138.     FishSettings = tabs.AutoFarm:AddSection({Title = gradient("Auto Fish Settings"), Description = "", Defualt = false , Locked = false}),
  139.     Item0 = tabs.Items:AddSection({Defualt = true , Locked = true}),
  140.     Item = tabs.Items:AddSection({Title = gradient("Purchase"), Description = "", Defualt = false , Locked = false}),
  141.     Item5 = tabs.Items:AddSection({Title = gradient("Selling & Favouriting"), Description = "", Defualt = false , Locked = false}),
  142.     Item1 = tabs.Items:AddSection({Title = gradient("Appraise"), Description = "", Defualt = false , Locked = false}),
  143.     Item2 = tabs.Items:AddSection({Title = gradient("Enchant"), Description = "", Defualt = false , Locked = false}),
  144.     Item3 = tabs.Items:AddSection({Title = gradient("Totems"), Description = "", Defualt = false , Locked = false}),
  145.     Item4 = tabs.Items:AddSection({Title = gradient("Treasures"), Description = "", Defualt = false , Locked = false}),
  146.     Tele = tabs.Teleporation:AddSection({Defualt = true , Locked = true}),
  147.     Tele1 = tabs.Teleporation:AddSection({Title = gradient("Teleports"), Description = "", Defualt = false , Locked = false}),
  148.     Tele2 = tabs.Teleporation:AddSection({Title = gradient("Advanced Teleports"), Description = "", Defualt = false , Locked = false}),
  149.     Misc = tabs.Misc:AddSection({Title = gradient("Character"), Description = "", Defualt = false , Locked = false}),
  150.     Misc1 = tabs.Misc:AddSection({Title = gradient("Anti Staff"), Description = "", Defualt = false , Locked = false}),
  151.     Misc3 = tabs.Misc:AddSection({Title = gradient("Platform"), Description = "", Defualt = false , Locked = false}),
  152.     Misc2 = tabs.Misc:AddSection({Title = gradient("Gifting"), Description = "", Defualt = false , Locked = false}),
  153.     Misc4 = tabs.Misc:AddSection({Title = gradient("Boats"), Description = "", Defualt = false , Locked = false}),
  154.     -- Misc5 = tabs.Misc:AddSection({Title = gradient("Exploits"), Description = "", Defualt = false , Locked = false}),
  155.     Visuals = tabs.Visuals:AddSection({Title = gradient("Visuals"), Description = "", Defualt = false , Locked = false}),
  156.     Visuals1 = tabs.Visuals:AddSection({Title = gradient("FPS"), Description = "", Defualt = false , Locked = false}),
  157.     Visuals2 = tabs.Visuals:AddSection({Title = gradient("Hide Identity"), Description = "", Defualt = false , Locked = false}),
  158.     Visuals3 = tabs.Visuals:AddSection({Title = gradient("ESP (soon)"), Description = "", Defualt = false , Locked = false}),
  159.     Visuals4 = tabs.Visuals:AddSection({Title = gradient("Rod Skin"), Description = "", Defualt = false , Locked = false}),
  160.     Gradient = tabs.Config:AddSection({Title = gradient("Gradient"), Description = "", Defualt = false , Locked = false}),
  161. }
  162.  
  163. local variables = {
  164.     autoSellDelay = 0,
  165.     autoselling = false,
  166.     TweenMethod = false,
  167.     TeleportMethod = true,
  168.     AutoCast = false,
  169.     AutoShake = false,
  170.     AutoCatch = false,
  171.     AlreadyRequested = false,
  172.     AutoToggleRadar = false,
  173.     Method1 = false,
  174.     Coords = "",
  175.     AutoCastZone = false,
  176.     baits = {},
  177.     SelectedBait = nil,
  178.     AutoPredictor = false,
  179.     AutoDrop = false
  180. }
  181.  
  182. genv.WelcomeParagraph  = sections.Welcome:AddParagraph({Title = gradient("Loading..."), Description = "Please wait..\nIf you've been stuck on this for a long time please join our discord and report it."})
  183. data = loadstring(game:HttpGet("https://you.whimper.xyz/sources/lunor/data.lua"))()
  184.  
  185.  
  186. local function prompt(npc)
  187.     local promptInstance = npc:FindFirstChild("dialogprompt")
  188.     if promptInstance then
  189.  
  190.         local player = services.Players.LocalPlayer
  191.         local char = player.Character
  192.         local oldParent = promptInstance.Parent
  193.         local oldDistance = promptInstance.MaxActivationDistance
  194.  
  195.         promptInstance.MaxActivationDistance = math.huge
  196.         promptInstance.Parent = char
  197.  
  198.         for _, obj in ipairs(char:GetChildren()) do
  199.             if obj:IsA("ProximityPrompt") then
  200.                 obj:InputHoldBegin()
  201.                 task.wait(0.01) -- Adjust this as needed for reliability
  202.                 obj:InputHoldEnd()
  203.             end
  204.         end
  205.  
  206.         promptInstance.Parent = oldParent
  207.         promptInstance.MaxActivationDistance = oldDistance
  208.     end
  209. end
  210.  
  211. if not genv.LunorDependencies then
  212.     local players = services.Players
  213.     local player = players.LocalPlayer
  214.     local workspaceService = game:GetService("Workspace")
  215.     local replicatedStorage = services.ReplicatedStorage
  216.     local virtualUser = game:GetService("VirtualUser")
  217.    
  218.     player.Idled:Connect(function()
  219.         virtualUser:CaptureController()
  220.         virtualUser:ClickButton2(Vector2.new())
  221.     end)
  222.  
  223.     local npcData = {
  224.         {name = "Marc Merchant", position = Vector3.new(466, 151, 224)},
  225.         {name = "Appraiser", position = Vector3.new(453.182373046875, 150.50003051757812, 206.90878295898438)},
  226.         {name = "Merlin", position = Vector3.new(-928.0328369140625, 223.7000274658203, -998.7449951171875)},
  227.         {name = "Jack Marrow", position = Vector3.new(-2829.855712890625, 212.09266662597656, 1517.4398193359375)},
  228.         {name = "Mods Latern Keeper", position = Vector3.new(-39, -247, 196)},
  229.         {name = "Terrapin Shipwright", position = Vector3.new(5869.421875, 143.49795532226562, 7.101318359375)}
  230.     }
  231.  
  232.     for _, npcInfo in ipairs(npcData) do
  233.         player:RequestStreamAroundAsync(npcInfo.position)
  234.         local npc = workspaceService.world.npcs:FindFirstChild(npcInfo.name)
  235.         if npc then
  236.             npc.ModelStreamingMode = Enum.ModelStreamingMode.Persistent
  237.             prompt(npc)
  238.         end
  239.     end
  240.  
  241.     player:GetPropertyChangedSignal("GameplayPaused"):Connect(function()
  242.         if player.GameplayPaused then
  243.             player.GameplayPaused = false
  244.         end
  245.     end)
  246.  
  247.     -- Anti Death Screen
  248.     local deathGui = player.PlayerGui:FindFirstChild("death")
  249.     if deathGui then
  250.         deathGui:GetPropertyChangedSignal("Enabled"):Connect(function()
  251.             if deathGui.Enabled then
  252.                 deathGui.Enabled = false
  253.             end
  254.         end)
  255.     end
  256.  
  257.     -- File Setup
  258.     if not isfolder("Lunor/Fisch") then
  259.         makefolder("Lunor/Fisch")
  260.     else
  261.     end
  262.     if not isfile("Lunor/Fisch/saved_teleports.json") then
  263.         writefile("Lunor/Fisch/saved_teleports.json", "{}")
  264.     end
  265.      
  266.     if workspace.zones.fishing:FindFirstChild("Brine Pool Water") then
  267.         workspace.zones.fishing:FindFirstChild("Brine Pool Water"):Destroy()
  268.     end
  269.    
  270.     player:RequestStreamAroundAsync("-1969.1385498046875, 312.765869140625, 255.92677307128906")
  271.     if workspace.world.map["Roslit Bay"]:FindFirstChild("Lava") then
  272.         for _,v in pairs(workspace.world.map["Roslit Bay"].Lava:GetDescendants()) do
  273.             if v.Name == "Lava" then
  274.                 v:Destroy()
  275.             end
  276.         end
  277.     end
  278.  
  279.     player:RequestStreamAroundAsync("1288.759765625, -899.0166015625, -191.36984252929688")
  280.     for _,v in pairs(workspace.world.map["Enchant Room"]:GetDescendants()) do
  281.         if v:IsA("TouchTransmitter") then
  282.             v.Parent:Destroy()
  283.         end
  284.     end
  285.     -- Rename Fisch Dev Mistake
  286.     workspace.world.npcs["Terrapin Shipwright"].Name = "Ancient Shipwright"
  287.     genv.LunorDependencies = true
  288.     services.ReplicatedStorage.events.anno_localthought:Fire([[<b><font color="#5359bf">L</font><font color="#4c4eb9">u</font><font color="#4644b3">n</font><font color="#403aad">o</font><font color="#3a30a8">r</font> Has Been loaded</b>]],5)
  289. end
  290.  
  291. lib:Notification("Loaded!","Anti AFK and more have been loaded.", 5)
  292.  
  293.  
  294. local Players = services.Players
  295. local CoreGui = game:GetService("StarterGui")
  296. local GuiService = game:GetService('GuiService')
  297. local ReplicatedStorage = game:GetService('ReplicatedStorage')
  298. local VIM = game:GetService('VirtualInputManager')
  299. local Lighting = game:GetService("Lighting")
  300. local RunService = game:GetService("RunService")
  301. local HttpService = services.HttpService
  302. local LocalPlayer = Players.LocalPlayer
  303. local Enabled = false
  304. local Rod = false
  305. local Progress = false
  306. local Finished = false
  307.  
  308. local PlayerStats = ReplicatedStorage:WaitForChild("playerstats")[LocalPlayer.Name].Stats
  309. local character = LocalPlayer.Character
  310.  
  311. function CreatePrice(Path, Price)
  312.     _G.existingLabel = Path:FindFirstChild("STOP SKIDDING >:(")
  313.     if _G.existingLabel then
  314.         _G.existingLabel.Text = tostring(Price) .. "C$"
  315.     else
  316.         _G.itemPrice = Instance.new("TextLabel", Path)
  317.         _G.itemPrice.Position = UDim2.new(0, 1, 0, 0)
  318.         _G.itemPrice.Size = UDim2.new(1, 0, 0.183, 0)
  319.         _G.itemPrice.ZIndex = 99999
  320.         _G.itemPrice.Transparency = 1
  321.         _G.itemPrice.Text = tostring(Price) .. "C$"
  322.         _G.itemPrice.TextXAlignment = Enum.TextXAlignment.Right
  323.         _G.itemPrice.Name = "STOP SKIDDING >:("
  324.         _G.itemPrice.TextSize = 14
  325.         _G.itemPrice.TextScaled = false
  326.         _G.itemPrice.Font = Enum.Font.SourceSans
  327.  
  328.         _G.uiStroke = Instance.new("UIStroke", _G.itemPrice)
  329.         _G.uiStroke.Color = Color3.fromRGB(255, 255, 255)
  330.         _G.uiStroke.Thickness = 0
  331.         _G.uiStroke.Transparency = 0
  332.  
  333.         _G.uiGradient = Instance.new("UIGradient", _G.uiStroke)
  334.         _G.uiGradient.Color = ColorSequence.new{
  335.             ColorSequenceKeypoint.new(0.000, Color3.fromRGB(116, 46, 255)),
  336.             ColorSequenceKeypoint.new(1.000, Color3.fromRGB(205, 113, 255))
  337.         }
  338.     end
  339. end
  340.  
  341. function getFishInventorySetting(fishName)
  342.     _G.playerName = game.Players.LocalPlayer.Name
  343.     _G.playerInventory = ReplicatedStorage.playerstats:FindFirstChild(_G.playerName).Inventory
  344.     _G.fishItem = _G.playerInventory:FindFirstChild(tostring(fishName))
  345.  
  346.     if _G.fishItem then
  347.         _G.fishSettings = {}
  348.         _G.fishSettings["Name"] = _G.fishItem.Value
  349.  
  350.         for _, child in ipairs(_G.fishItem:GetChildren()) do
  351.             if child:IsA("ValueBase") then
  352.                 _G.fishSettings[child.Name] = child.Value
  353.             end
  354.         end
  355.  
  356.         return _G.fishSettings
  357.     else
  358.         return nil
  359.     end
  360. end
  361.  
  362. function GetBackPackItemValue(Name)
  363.     _G.Price = nil
  364.  
  365.     if type(getFishInventorySetting(Name)) == "table" then
  366.         if getFishInventorySetting(Name).Weight then
  367.             _G.Price = math.ceil(data.Fish[getFishInventorySetting(Name).Name].Price / data.Fish[getFishInventorySetting(Name).Name].WeightPool[2] * getFishInventorySetting(Name).Weight * 10)
  368.         else return 0
  369.         end
  370.         if getFishInventorySetting(Name).Shiny then
  371.             _G.Price = _G.Price * 1.85
  372.         end
  373.         if getFishInventorySetting(Name).Sparkling then
  374.             _G.Price = _G.Price * 1.85
  375.         end
  376.         if getFishInventorySetting(Name).Mutation then
  377.             _G.Price = _G.Price * data.Mutations[tostring(getFishInventorySetting(Name).Mutation)].PriceMultiply
  378.         end
  379.         if getFishInventorySetting(Name).Stack then
  380.             _G.Price = _G.Price * getFishInventorySetting(Name).Stack
  381.         end
  382.         return math.ceil(_G.Price)
  383.     else
  384.         return getFishInventorySetting(Name)
  385.     end
  386. end
  387.  
  388. function UpdatePrice(item)
  389.     _G.itemValue = item.Value
  390.     _G.price = GetBackPackItemValue(_G.itemValue)
  391.     if _G.price then
  392.         CreatePrice(item.Parent, _G.price)
  393.     end
  394. end
  395.  
  396. function clearPriceLabels()
  397.     for _, descendant in ipairs(game.Players.LocalPlayer.PlayerGui.hud.safezone:WaitForChild("backpack"):GetDescendants()) do
  398.         if descendant:IsA("TextLabel") and descendant.Name == "STOP SKIDDING >:(" then
  399.             descendant:Destroy()
  400.         end
  401.     end
  402. end
  403.  
  404.  
  405. _G.connections = {}
  406. _G.running = false
  407. genv.AutoPriceCheck = false
  408. function monitorBackpack()
  409.     _G.running = true
  410.  
  411.     _G.backpack = game.Players.LocalPlayer.PlayerGui.hud.safezone:WaitForChild("backpack")
  412.  
  413.     function processItem(descendant)
  414.         if not _G.running then return end
  415.         if descendant:IsA("ValueBase") and descendant.Name == "item" then
  416.             _G.price = GetBackPackItemValue(descendant.Value)
  417.             if _G.price then
  418.                 CreatePrice(descendant.Parent, _G.price)
  419.             end
  420.         end
  421.     end
  422.  
  423.     _G.descendantAddedConnection = _G.backpack.DescendantAdded:Connect(function(descendant)
  424.         if not _G.running then return end
  425.         task.defer(function()
  426.             processItem(descendant)
  427.         end)
  428.     end)
  429.     table.insert(_G.connections, _G.descendantAddedConnection)
  430.  
  431.  
  432.     for _, descendant in ipairs(_G.backpack:GetDescendants()) do
  433.         processItem(descendant)
  434.         if descendant:IsA("ValueBase") and descendant.Name == "item" then
  435.             _G.propertyChangedConnection = descendant:GetPropertyChangedSignal("Value"):Connect(function()
  436.                 if not _G.running then return end
  437.                 processItem(descendant)
  438.             end)
  439.             table.insert(_G.connections, _G.propertyChangedConnection)
  440.         end
  441.     end
  442. end
  443.  
  444.  
  445. function ChangePlayerCFrame(X, Y, Z)
  446.     if variables.TweenMethod then
  447.         for _, model in pairs(workspace:GetChildren()) do
  448.             if model:IsA("Model") then
  449.                 for _, obj in pairs(model:GetDescendants()) do
  450.                     if obj:IsA("Seat") then
  451.                         obj.Disabled = true
  452.                     end
  453.                 end
  454.             end
  455.         end
  456.  
  457.         local TargetTween = game:GetService("TweenService"):Create(
  458.             LocalPlayer.Character:WaitForChild("HumanoidRootPart"),
  459.             TweenInfo.new(2, Enum.EasingStyle.Linear, Enum.EasingDirection.Out),
  460.             {CFrame = CFrame.new(X, Y, Z) + CFrame.new(0, 5, 0)}
  461.         )
  462.         TargetTween:Play()
  463.         TargetTween.Completed:Connect(function()
  464.             for _, model in pairs(workspace:GetChildren()) do
  465.                 if model:IsA("Model") then
  466.                     for _, obj in pairs(model:GetDescendants()) do
  467.                         if obj:IsA("Seat") then
  468.                             obj.Disabled = false
  469.                         end
  470.                     end
  471.                 end
  472.             end
  473.         end)
  474.     elseif variables.TeleportMethod == true then
  475.         LocalPlayer.Character:WaitForChild("HumanoidRootPart").CFrame = CFrame.new(X, Y + 3, Z)
  476.     end
  477. end
  478.  
  479.  
  480. function clickButton()
  481.     if LocalPlayer.PlayerGui:FindFirstChild("shakeui") then
  482.         if LocalPlayer.PlayerGui:FindFirstChild("shakeui"):FindFirstChild("safezone") then
  483.             if LocalPlayer.PlayerGui:FindFirstChild("shakeui"):FindFirstChild("safezone"):FindFirstChild("button") then
  484.                 local VirtualInputManager = game:GetService("VirtualInputManager")
  485.                 local buttonPosition = LocalPlayer.PlayerGui:FindFirstChild("shakeui"):FindFirstChild("safezone"):FindFirstChild("button").AbsolutePosition
  486.                 local buttonSize = LocalPlayer.PlayerGui:FindFirstChild("shakeui"):FindFirstChild("safezone"):FindFirstChild("button").AbsoluteSize
  487.  
  488.                 VirtualInputManager:SendMouseButtonEvent(
  489.                     buttonPosition.X + buttonSize.X / 2,
  490.                     buttonPosition.Y + buttonSize.Y / 2,
  491.                     0,
  492.                     true,
  493.                     game,
  494.                     1
  495.                 )
  496.  
  497.                 VirtualInputManager:SendMouseButtonEvent(
  498.                     buttonPosition.X + buttonSize.X / 2,
  499.                     buttonPosition.Y + buttonSize.Y / 2,
  500.                     0,
  501.                     false,
  502.                     game,
  503.                     1
  504.                 )
  505.             end
  506.         end
  507.     end
  508. end
  509.  
  510.  
  511.  
  512.  
  513. local function brightFunc()
  514.     Lighting.Brightness = 2
  515.     Lighting.ClockTime = 14
  516.     Lighting.FogEnd = 100000
  517.     Lighting.GlobalShadows = false
  518.     Lighting.OutdoorAmbient = Color3.fromRGB(128, 128, 128)
  519. end
  520.  
  521. local function getEquippedRod()
  522.     return ReplicatedStorage.playerstats[tostring(LocalPlayer)].Stats.rod.Value
  523. end
  524.  
  525. local function equipRod()
  526.     local rodName = getEquippedRod()
  527.     if rodName and not LocalPlayer.Character:FindFirstChild(rodName) then
  528.         local rod = LocalPlayer.Backpack:FindFirstChild(rodName)
  529.         if rod then rod.Parent = LocalPlayer.Character end
  530.     end
  531. end
  532.  
  533. local function determineBestBait()
  534.     local bestBait = nil
  535.     local bestValue = -math.huge
  536.  
  537.     if genv.SelectedBait == "Most" or genv.SelectedBait == "Least" then
  538.         -- Handle "Most" and "Least"
  539.         for _, baitName in ipairs(availableBaits) do
  540.             local baitStat = ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.bait:FindFirstChild("bait_" .. baitName)
  541.             if baitStat then
  542.                 local baitValue = baitStat.Value
  543.                 if genv.SelectedBait == "Most" then
  544.                     if baitValue > bestValue then
  545.                         bestValue = baitValue
  546.                         bestBait = baitName
  547.                     end
  548.                 elseif genv.SelectedBait == "Least" then
  549.                     if baitValue < bestValue or bestValue == -math.huge then
  550.                         bestValue = baitValue
  551.                         bestBait = baitName
  552.                     end
  553.                 end
  554.             end
  555.         end
  556.     else
  557.         -- Handle other cases based on the selected bait property
  558.         for _, baitName in ipairs(availableBaits) do
  559.             if data.Bait[baitName] then
  560.                 local baitData = data.Bait[baitName]
  561.                 local baitValue = baitData[genv.SelectedBait]
  562.                 if baitValue then
  563.                     baitValue = tonumber(baitValue)
  564.                     if baitValue and baitValue > bestValue then
  565.                         bestValue = baitValue
  566.                         bestBait = baitName
  567.                     end
  568.                 end
  569.             end
  570.         end
  571.     end
  572.  
  573.     -- Equip the best bait
  574.     if bestBait then
  575.         if ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.bait.Value ~= bestBait then
  576.             if services.Players.LocalPlayer.PlayerGui:FindFirstChild("reel") then
  577.                 repeat task.wait() until not services.Players.LocalPlayer.PlayerGui:FindFirstChild("reel")
  578.             end
  579.             LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  580.             LocalPlayer.Backpack["Equipment Bag"].Parent = LocalPlayer.Character
  581.             services.ReplicatedStorage.packages.Net["RE/Bait/Equip"]:FireServer(bestBait)
  582.             LocalPlayer.Character["Equipment Bag"].Parent = LocalPlayer.Backpack
  583.             -- Get the rarity of the best bait
  584.             local baitData = data.Bait[bestBait]
  585.             local baitRarity = baitData and baitData.Rarity or "Unknown"
  586.             local baitLureSpeed = baitData and baitData.LureSpeed or "Unknown"
  587.             local baitLuck = baitData and baitData.Luck or "Unknown"
  588.             local baitGeneralLuck = baitData and baitData.GenerelLuck or "Unknown"
  589.             local baitResilience = baitData and baitData.Resilience or "Unknown"
  590.  
  591.             -- Notify the player about the bait and its rarity
  592.             lib:Notification("Auto Bait", "Equipped " .. bestBait, 5)
  593.            
  594.  
  595.             -- Paragraph part.. very overkill, I know.
  596.             local rarityColors = {
  597.                 Common = "<font color='rgb(142, 187, 191)'>Common</font>",
  598.                 Uncommon = "<font color='rgb(161, 255, 169)'>Uncommon</font>",
  599.                 Rare = "<font color='rgb(119, 108, 181)'>Rare</font>",
  600.                 Legendary = "<font color='rgb(240, 181, 109)'>Legendary</font>",
  601.                 Mythical = "<font color='rgb(255, 62, 120)'>Mythical</font>",
  602.                 Unusual = "<font color='rgb(192, 135, 198)'>Unusual</font>",
  603.                 Unknown = "<font color='rgb(255, 255, 255)'>Unknown</font>"
  604.             }
  605.  
  606.             -- Function to determine the rich text color based on the value
  607.             local function getValueColor(value)
  608.                 if value == "Unknown" then
  609.                     return value -- If the value is unknown, return it as is
  610.                 elseif tonumber(value) then
  611.                     local numValue = tonumber(value)
  612.                     if numValue > 0 then
  613.                         return "<font color='rgb(0, 255, 0)'>" .. value .. "</font>" -- Green for positive numbers
  614.                     elseif numValue < 0 then
  615.                         return "<font color='rgb(255, 0, 0)'>" .. value .. "</font>" -- Red for negative numbers
  616.                     elseif numValue == 0 then
  617.                         return "<font color='rgb(255, 255, 255)'>" .. value .. "</font>" -- White for 0
  618.                     end
  619.                 end
  620.                 return value -- Return as is if it's not a number
  621.             end
  622.  
  623.             -- Safely update the UI with rich text formatting
  624.             pcall(function()
  625.                 local baitRarityColor = rarityColors[baitRarity] or rarityColors.Unknown
  626.            
  627.                 -- Apply the rarity color to the best bait name
  628.                 local bestBaitColor = baitRarityColor:gsub("Common", bestBait)
  629.                     :gsub("Uncommon", bestBait)
  630.                     :gsub("Rare", bestBait)
  631.                     :gsub("Legendary", bestBait)
  632.                     :gsub("Mythical", bestBait)
  633.                     :gsub("Unusual", bestBait)
  634.                     :gsub("Unknown", bestBait)
  635.            
  636.                 local baitLureSpeedColor = getValueColor(baitLureSpeed)
  637.                 local baitLuckColor = getValueColor(baitLuck)
  638.                 local baitGeneralLuckColor = getValueColor(baitGeneralLuck)
  639.                 local baitResilienceColor = getValueColor(baitResilience)
  640.            
  641.                 genv.BaitParagraph:SetTitle("Optimal Bait: " .. bestBaitColor)
  642.                 genv.BaitParagraph:SetDesc("Lure Speed: " .. baitLureSpeedColor .. " | Luck: " .. baitLuckColor .. " | General Luck: " .. baitGeneralLuckColor .. " | Resilience: " .. baitResilienceColor)
  643.             end)
  644.  
  645.         end
  646.     else
  647.         lib:Notification("Auto Bait", "No suitable baits found.", 5)
  648.         genv.AutoBaitToggle:Set(false)
  649.     end
  650. end
  651.  
  652.  
  653. local function DestroyGhostItems()
  654.     for i,v in pairs(LocalPlayer.Character:GetChildren()) do
  655.         if v:IsA("Tool") and v:FindFirstChild("link") then
  656.             if v.link.Value and v.link.Value:IsDescendantOf(game) then
  657.                 continue
  658.             else
  659.                 v:Destroy()
  660.             end
  661.         end
  662.     end
  663.     for i,v in pairs(LocalPlayer.Backpack:GetChildren()) do
  664.         if v:IsA("Tool") and v:FindFirstChild("link") then
  665.             if v.link.Value and v.link.Value:IsDescendantOf(game) then
  666.                 continue
  667.             else
  668.                 v:Destroy()
  669.             end
  670.         end
  671.     end
  672.     for _, child in ipairs(LocalPlayer.PlayerGui.hud.safezone.backpack.inventory.scroll:GetChildren()) do
  673.         local item = child:FindFirstChild("item")
  674.         if item and item.Value == nil then
  675.             child:Destroy()
  676.         end
  677.     end
  678. end
  679.  
  680.  
  681.  
  682. local function formatPrice(price)
  683.     return string.format("%s$", tostring(price):reverse():gsub("%d%d%d", "%0,"):reverse():gsub("^,", ""))
  684. end
  685.  
  686. local function unformatPrice(formattedPrice)
  687.     local cleanPrice = formattedPrice:gsub("[^0-9]", "")
  688.     return tonumber(cleanPrice)
  689. end
  690.  
  691. local function rgbToRichText(rgbString, text)
  692.     -- Split the RGB string into individual components
  693.     local r, g, b = rgbString:match("([^,]+),([^,]+),([^,]+)")
  694.     r, g, b = tonumber(r), tonumber(g), tonumber(b)
  695.  
  696.     -- Return the text in rich text format with the specified RGB color
  697.     return string.format("<font color=\"rgb(%d,%d,%d)\">%s</font>", r * 255, g * 255, b * 255, text)
  698. end
  699.  
  700.  
  701. local function gift(user, item)
  702.     local checkFish = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  703.     local inventoryItem = ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[tostring(checkFish.link.Value)]
  704.  
  705.     if genv.ExcludeFavourite then
  706.         if inventoryItem:FindFirstChild("Favourited") then
  707.         else
  708.             pcall(function()
  709.                 local args = {
  710.                     [1] = Players:WaitForChild(user)
  711.                 }
  712.            
  713.                 LocalPlayer.Character[item].offer:FireServer(unpack(args))
  714.             end)
  715.         end
  716.     else
  717.         pcall(function()
  718.             local args = {
  719.                 [1] = Players:WaitForChild(user)
  720.             }
  721.        
  722.             LocalPlayer.Character[item].offer:FireServer(unpack(args))
  723.         end)
  724.     end
  725. end    
  726.  
  727. local function validToolCheck()
  728.     local tool = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  729.    
  730.     if tool and tool:FindFirstChild("offer") then
  731.         return true
  732.     else
  733.         return false
  734.     end
  735. end
  736.  
  737. local function giftAll()
  738.     for i, v in pairs(LocalPlayer.Backpack:GetChildren()) do
  739.         if v:IsA("Tool") and v:FindFirstChild("offer") then
  740.             v.Parent = LocalPlayer.Character
  741.             gift(genv.SelectedPlayer, v.Name)
  742.             LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  743.             wait()
  744.         end
  745.     end
  746. end
  747.  
  748. function formatNumber(number)
  749.     return tostring(number):reverse():gsub("(%d%d%d)", "%1,"):gsub(",$", ""):reverse()
  750. end
  751.  
  752. if RoleChecker() == "Free Version" or RoleChecker() == "No Role Assigned" then
  753.     sections.Premium = tabs.Main:AddSection({Defualt = true , Locked = true})
  754.     sections.Premium:AddParagraph({Title = '<font color="rgb(255,0,0)">Tired of the key system?</font>', Description = "Buy premium by joining our Discord."})
  755.     sections.Premium:AddButton({
  756.         Title = "Copy Discord Invite",
  757.         Callback = function()
  758.             setclipboard("https://discord.gg/25ms")
  759.             lib:Notification("Discord","Copied invite to clipboard, just paste it.", 5)
  760.         end,
  761.     })
  762. end
  763.  
  764. -- sections.Welcome:AddParagraph({Title = '<font color="#ea00ff" size="30">W</font><font color="#d500ff" size="30">e</font><font color="#c000ff" size="30">l</font><font color="#aa00fe" size="30">c</font><font color="#9600ff" size="30">o</font><font color="#8100ff" size="30">m</font><font color="#6c00ff" size="30">e</font><font color="#5700ff" size="30">!</font>',
  765. --                                Description = "Here's what's new:\n-\n-\n-"})
  766.  
  767. genv.WelcomeParagraph:SetTitle(gradient("Welcome!"))
  768. genv.WelcomeParagraph:SetDesc([[<font color="rgb(255,255,255)">Here's what's new:</font>
  769. [+] Tidebreaker Speed
  770. [+] Toggle to Make TideBreaker Easier to Control
  771. [+] If your executor support u can change the MaxSpeed,TurningSpeed,Acceleration
  772. ]])
  773.  
  774.  
  775. -- genv.FishPremiumParagraph = sections.FishPremium:AddParagraph({Title = 'Original Rod & Enchant:', Description = "Rod: Will update after 'Use Rod'\nEnchant: Will update after 'Use Enchant'"})
  776.  
  777. -- local rodNamesExploit = {}
  778. -- for name, _ in pairs(data.Rods) do
  779. --     table.insert(rodNamesExploit, name)
  780. -- end
  781.  
  782. -- sections.FishPremium:AddDropdown("RodsList", {
  783. --     Title = "Rods List",
  784. --     Description = "",
  785. --     Options = rodNamesExploit,
  786. --     Default = "",
  787. --     PlaceHolder = "Select Rod",
  788. --     Multiple = false,
  789. --     Callback = function(selectRod)
  790. --         genv.selectedExploitRod = selectRod
  791. --     end,
  792. -- })
  793.  
  794. -- local enchantNamesExploit = {}
  795. -- for name, _ in pairs(data.Enchants) do
  796. --     table.insert(enchantNamesExploit, name)
  797. -- end
  798.  
  799. -- sections.FishPremium:AddDropdown("EnchantsList", {
  800. --     Title = "Enchants List",
  801. --     Description = "",
  802. --     Options = enchantNamesExploit,
  803. --     Default = "",
  804. --     PlaceHolder = "Select Enchant",
  805. --     Multiple = false,
  806. --     Callback = function(selectEnchant)
  807. --         genv.selectedExploitEnchant = selectEnchant
  808. --     end,
  809. -- })
  810.  
  811.  
  812. -- local exploitGroupButton = sections.FishPremium:AddGroupButton()
  813.  
  814. -- exploitGroupButton:AddButton({
  815. --     Title = "Use Last Known",
  816. --     Variant = "Outline",
  817. --     Callback = function()
  818. --         if genv.realRod ~= nil then
  819. --             if services.Players.LocalPlayer.Backpack:FindFirstChild(genv.latestRod) then
  820. --                 services.Players.LocalPlayer.Backpack[genv.latestRod].Name = genv.realRod
  821. --             else
  822. --                 services.Players.LocalPlayer.Character[genv.latestRod].Name = genv.realRod
  823. --             end
  824. --         end
  825. --         if genv.realEnchant ~= nil then
  826. --             services.ReplicatedStorage.playerstats[LocalPlayer.Name].Rods[genv.lastKnownRod].Value = genv.realEnchant
  827. --         end
  828. --     end
  829. -- })
  830.  
  831. -- exploitGroupButton:AddButton({
  832. --     Title = "Use Rod",
  833. --     Variant = "Primary",
  834. --     Callback = function()
  835. --         if genv.realRod == nil then
  836. --             genv.realRod = tostring(services.ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.rod.Value)
  837. --         end
  838. --         genv.lastKnownRod = tostring(services.ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.rod.Value)
  839. --         services.ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.rod.Value = genv.selectedExploitRod
  840. --         if services.Players.LocalPlayer.Backpack:FindFirstChild(genv.lastKnownRod) then
  841. --             services.Players.LocalPlayer.Backpack[genv.lastKnownRod].Name = genv.selectedExploitRod
  842. --             genv.latestRod = genv.selectedExploitRod
  843. --         end
  844. --         genv.FishPremiumParagraph:SetDesc(
  845. --             "Rod: " .. (genv.realRod or "Will update after 'Use Rod'") ..
  846. --             "\nEnchant: " .. (genv.realEnchant or "Will update after 'Use Enchant'")
  847. --         )
  848. --     end,
  849. -- })
  850.  
  851. -- exploitGroupButton:AddButton({
  852. --     Title = "Use Enchant",
  853. --     Variant = "Primary",
  854. --     Callback = function()
  855. --         print(genv.lastKnownRod)
  856. --         print(tostring(genv.latestRod))
  857. --         print(tostring(services.ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.rod.Value))
  858. --         local currentRod = genv.latestRod or tostring(services.ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.rod.Value)
  859. --         if genv.realEnchant == nil then
  860. --             if genv.lastKnownRod ~= nil then
  861. --                 genv.realEnchant = tostring(services.ReplicatedStorage.playerstats[LocalPlayer.Name].Rods[genv.lastKnownRod].Value)
  862. --             else
  863. --                 genv.realEnchant = tostring(services.ReplicatedStorage.playerstats[LocalPlayer.Name].Rods[currentRod].Value)
  864. --             end
  865. --         end
  866. --         if genv.lastKnownRod ~= nil then
  867. --             if services.ReplicatedStorage.playerstats[LocalPlayer.Name].Rods:FindFirstChild(genv.lastKnownRod) then
  868. --                 services.ReplicatedStorage.playerstats[LocalPlayer.Name].Rods[genv.lastKnownRod].Value = genv.selectedExploitEnchant
  869. --             else
  870. --                 services.ReplicatedStorage.playerstats[LocalPlayer.Name].Rods[genv.latestRod].Value = genv.selectedExploitEnchant
  871. --             end
  872. --         else
  873. --             services.ReplicatedStorage.playerstats[LocalPlayer.Name].Rods[currentRod].Value = genv.selectedExploitEnchant
  874. --         end
  875. --         genv.FishPremiumParagraph:SetDesc(
  876. --             "Rod: " .. (genv.realRod or "Will update after 'Use Rod'") ..
  877. --             "\nEnchant: " .. (genv.realEnchant or "Will update after 'Use Enchant'")
  878. --         )
  879. --     end,
  880. -- })
  881.  
  882.  
  883. sections.Fish:AddToggle("AutoCast", {
  884.     Title = "Auto Equip Rod",
  885.     Default = false,
  886.     Description = "",
  887.     Callback = function(isEnabled)
  888.         variables.AutoEquipRod = isEnabled
  889.        
  890.         spawn(function()
  891.             while variables.AutoEquipRod do
  892.                 if not genv.TotemInUse then
  893.                     equipRod()
  894.                     task.wait(0.1)
  895.                 -- end
  896.                 end
  897.             end
  898.         end)
  899.     end
  900. })
  901.  
  902. variables.Caster = sections.Fish:AddToggle("AutoCast", {
  903.     Title = "Auto Cast",
  904.     Default = false,
  905.     Description = "",
  906.     Callback = function(isEnabled)
  907.         variables.AutoCast = isEnabled
  908.  
  909.         spawn(function()
  910.             while variables.AutoCast do
  911.                 local character = LocalPlayer.Character
  912.                 if character then
  913.                     local equippedRod = character:FindFirstChild(getEquippedRod())
  914.                     if equippedRod then
  915.                         local bobber = equippedRod:FindFirstChild("bobber")
  916.                         if not bobber and not genv.TotemInUse then
  917.                             equippedRod.events.cast:FireServer(variables.autoCastPower, 1)
  918.                             task.wait(variables.AutoCastDelay)
  919.                         end
  920.                     end
  921.                 end
  922.                 task.wait(0.1)
  923.             end
  924.         end)
  925.     end
  926. })
  927.  
  928.  
  929. local connection
  930.  
  931. sections.Fish:AddToggle("AutoShake", {
  932.     Title = "Auto Shake",
  933.     Default = false,
  934.     Description = "",
  935.     Callback = function(isEnabled)
  936.         variables.AutoShake = isEnabled
  937.         if variables.AutoShake then
  938.             lib:Notification("Auto Shake","Adjust the speed to your liking in the settings.", 4)
  939.         end
  940.         -- local pressedBackSlash = false
  941.         while variables.AutoShake do
  942.             task.wait(variables.AutoShakeDelay)
  943.             if not LocalPlayer.PlayerGui:FindFirstChild("shakeui") then
  944.                 continue
  945.             end
  946.             GuiService.SelectedObject = nil
  947.             if not variables.Method1 then
  948.                 pcall(function()
  949.                     local button = LocalPlayer.PlayerGui:WaitForChild("shakeui", 1):WaitForChild("safezone", 1):WaitForChild("button", 1)
  950.  
  951.                     button.Selectable = true
  952.                     GuiService.SelectedObject = button
  953.                
  954.                     -- if not pressedBackSlash then
  955.                     --     GuiService.GuiNavigationEnabled = false
  956.                     --     pressedBackSlash = true
  957.                     -- end
  958.                
  959.                     VIM:SendKeyEvent(true, Enum.KeyCode.Return, false, LocalPlayer.PlayerGui)
  960.                     VIM:SendKeyEvent(false, Enum.KeyCode.Return, false, LocalPlayer.PlayerGui)
  961.                 end)
  962.             else
  963.                 clickButton()
  964.             end
  965.         end
  966.         GuiService.SelectedObject = nil
  967.     end
  968. })
  969.  
  970.  
  971. sections.Fish:AddToggle("AutoDropper", {
  972.     Title = "Auto Drop Bobber",
  973.     Default = false,
  974.     Description = "",
  975.     Callback = function(isEnabled)
  976.         variables.AutoDrop = isEnabled
  977.  
  978.         if variables.AutoDrop then
  979.             local rod = character:WaitForChild(PlayerStats.rod.Value)
  980.             variables.autoDropConnection = rod.ChildAdded:Connect(function(child)
  981.                 if child.Name == "bobber" then
  982.                     task.wait(0.16)
  983.  
  984.                     local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
  985.                     local nearestWaterPosition = nil
  986.                     local closestDistance = math.huge
  987.                     local desiredOffset = 1
  988.  
  989.                     for x = -50, 50, 5 do
  990.                         for z = -50, 50, 5 do
  991.                             local checkPosition = humanoidRootPart.Position + Vector3.new(x, 0, z)
  992.                             local rayOrigin = Vector3.new(checkPosition.X, humanoidRootPart.Position.Y + 50, checkPosition.Z)
  993.                             local rayDirection = Vector3.new(0, -100, 0)
  994.  
  995.                             local raycastParams = RaycastParams.new()
  996.                             raycastParams.FilterDescendantsInstances = {workspace.Terrain}
  997.                             raycastParams.FilterType = Enum.RaycastFilterType.Whitelist
  998.  
  999.                             local rayResult = workspace:Raycast(rayOrigin, rayDirection, raycastParams)
  1000.                             if rayResult then
  1001.                                 local hitPosition = rayResult.Position
  1002.                                 local hitMaterial = rayResult.Material
  1003.  
  1004.                                 if hitMaterial == Enum.Material.Water then
  1005.                                     local distance = (humanoidRootPart.Position - hitPosition).Magnitude
  1006.                                     if distance < closestDistance and distance > desiredOffset then
  1007.                                         closestDistance = distance
  1008.                                         nearestWaterPosition = hitPosition
  1009.                                     end
  1010.                                 end
  1011.                             end
  1012.                         end
  1013.                     end
  1014.  
  1015.                     if nearestWaterPosition then
  1016.                         print("Water found at:", nearestWaterPosition)
  1017.                         local offsetDirection = (nearestWaterPosition - humanoidRootPart.Position).Unit
  1018.                         local finalPosition = nearestWaterPosition + offsetDirection * desiredOffset
  1019.                         child.CFrame = CFrame.new(finalPosition)
  1020.                         print("Bobber moved to water.")
  1021.                     else
  1022.                         print("No suitable water found.")
  1023.                     end
  1024.                 end
  1025.             end)
  1026.         else
  1027.             if variables.autoDropConnection then
  1028.                 variables.autoDropConnection:Disconnect()
  1029.                 variables.autoDropConnection = nil
  1030.                 print("AutoDropper turned off.")
  1031.             end
  1032.         end
  1033.     end
  1034. })
  1035.  
  1036.  
  1037.  
  1038. local function generateRandomNumber(min, max)
  1039.     return math.random() * (max - min) + min
  1040. end
  1041.  
  1042. sections.Fish:AddToggle("AutoCatch", {
  1043.     Title = "Auto Reel",
  1044.     Default = false,
  1045.     IgnoreFirst = true,
  1046.     Description = "",
  1047.     Callback = function(isEnabled)
  1048.         variables.AutoCatch = isEnabled
  1049.  
  1050.         if isEnabled then
  1051.             variables.AlreadyRequested = false
  1052.             coroutine.wrap(function()
  1053.                 while variables.AutoCatch do
  1054.                     task.wait(0.1)
  1055.  
  1056.                     local reelGui = LocalPlayer.PlayerGui:FindFirstChild("reel")
  1057.                     if not (reelGui and reelGui.Enabled) then
  1058.                         continue
  1059.                     end
  1060.                    
  1061.                     -- print("enabled")
  1062.                     -- print("making sure of position..")
  1063.                     repeat task.wait() until services.Players.LocalPlayer.PlayerGui.reel.bar.fish.Position == UDim2.new(0.5, 0, 0.5, 0)
  1064.                     -- print("correct position")
  1065.                     local bar = reelGui:FindFirstChild("bar")
  1066.                     local playerBar = bar and bar:FindFirstChild("playerbar")
  1067.                     local fish = bar and bar:FindFirstChild("fish")
  1068.                     if not bar or not playerBar or not fish then
  1069.                         continue -- Skip if essential components are missing
  1070.                     end
  1071.                     -- print("found bar, waiting for move")
  1072.                     if variables.ReelMethod1 == false then
  1073.                         -- Wait for bar to move before firing the event
  1074.                         local startPosition = LocalPlayer.PlayerGui:WaitForChild("reel").bar.playerbar.AbsolutePosition.X
  1075.                         repeat task.wait() until LocalPlayer.PlayerGui:WaitForChild("reel").bar.playerbar.AbsolutePosition.X ~= startPosition
  1076.                         -- print("moved!")
  1077.  
  1078.                         if variables.snapChance and math.random(1, 100) <= variables.snapChance then
  1079.                             local args = {generateRandomNumber(-0.05, 0.1), false}
  1080.                             -- print("nuh uh")
  1081.                             ReplicatedStorage:WaitForChild("events"):WaitForChild("reelfinished"):FireServer(unpack(args))
  1082.                         else
  1083.                             -- print('remote.')
  1084.                             if genv.PerfectCatch then
  1085.                                 ReplicatedStorage:WaitForChild("events"):WaitForChild("reelfinished"):FireServer(100, true)
  1086.                             else
  1087.                                 ReplicatedStorage:WaitForChild("events"):WaitForChild("reelfinished"):FireServer(100, false)
  1088.                             end
  1089.                         end
  1090.  
  1091.                         repeat task.wait(0.1) until not LocalPlayer.PlayerGui:FindFirstChild("reel")
  1092.                     else
  1093.                         -- Follow Bar Method
  1094.                         repeat
  1095.                             task.wait()
  1096.                             if playerBar and fish then
  1097.                                 playerBar.Position = fish.Position
  1098.                             else
  1099.                                 break
  1100.                             end
  1101.                         until not LocalPlayer.PlayerGui:FindFirstChild("reel")
  1102.                     end
  1103.                 end
  1104.             end)()
  1105.         else
  1106.             variables.AutoCatch = false
  1107.         end
  1108.     end
  1109. })
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117. -- sections.Fish:AddToggle("AutoCatch", {
  1118. --     Title = "Auto Reel",
  1119. --     Default = false,
  1120. --     IgnoreFirst = true,
  1121. --     Description = "",
  1122. --     Callback = function(isEnabled)
  1123. --         variables.AutoCatch = isEnabled
  1124.        
  1125. --         if isEnabled then
  1126. --             variables.AlreadyRequested = false
  1127.  
  1128. --             -- Check the method type
  1129. --             if not variables.Method1 then
  1130. --                 -- Method 1: Auto Reel
  1131. --                 spawn(function()
  1132. --                     while variables.AutoCatch do
  1133. --                         task.wait()
  1134. --                         local reelGui = LocalPlayer.PlayerGui:FindFirstChild("reel")
  1135. --                         if reelGui and not variables.AlreadyRequested then
  1136. --                             variables.AlreadyRequested = true
  1137.                            
  1138. --                             -- Fire server event
  1139. --                             local reelfinished = ReplicatedStorage:WaitForChild("events"):FindFirstChild("reelfinished")
  1140. --                             if reelfinished then
  1141. --                                 reelfinished:FireServer(100, true)
  1142. --                             end
  1143.  
  1144. --                             -- Adjust GUI bar properties
  1145. --                             local playerBar = LocalPlayer.PlayerGui:FindFirstChild("reel"):FindFirstChild("bar"):FindFirstChild("playerbar")
  1146. --                             if playerBar then
  1147. --                                 playerBar.Size = UDim2.new(1, 0, 1.3, 0)
  1148. --                                 playerBar.Position = UDim2.new(0.5, 0, 0.5, 0)
  1149. --                             end
  1150.  
  1151. --                             variables.AlreadyRequested = false
  1152. --                         end
  1153. --                     end
  1154. --                 end)
  1155. --             else
  1156. --                 -- Method 2: Match Bar Position
  1157. --                 spawn(function()
  1158. --                     while variables.AutoCatch do
  1159. --                         task.wait()
  1160. --                         local reelGui = LocalPlayer.PlayerGui:FindFirstChild("reel")
  1161. --                         if reelGui and reelGui:FindFirstChild("bar") then
  1162. --                             local playerBar = reelGui.bar:FindFirstChild("playerbar")
  1163. --                             local fishBar = reelGui.bar:FindFirstChild("fish")
  1164. --                             if playerBar and fishBar then
  1165. --                                 playerBar.Position = fishBar.Position
  1166. --                             end
  1167. --                         end
  1168. --                     end
  1169. --                 end)
  1170. --             end
  1171. --         else
  1172. --             -- Disable AutoCatch
  1173. --             variables.AutoCatch = false
  1174. --         end
  1175. --     end
  1176. -- })
  1177.  
  1178.  
  1179. sections.Fish:AddToggle("FreezeCharacter", {
  1180.     Title = "Freeze Character",
  1181.     Default = false,
  1182.     Description = "",
  1183.     Callback = function(isEnabled)
  1184.         variables.FreezeCharacter = isEnabled
  1185.         local oldpos = nil
  1186.  
  1187.         while variables.FreezeCharacter do
  1188.             local player = LocalPlayer
  1189.             local character = player.Character or player.CharacterAdded:Wait()
  1190.             local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
  1191.        
  1192.             if oldpos == nil then
  1193.                 oldpos = humanoidRootPart.CFrame
  1194.             end
  1195.        
  1196.             humanoidRootPart.CFrame = oldpos
  1197.             humanoidRootPart.Velocity = Vector3.zero
  1198.        
  1199.             task.wait()
  1200.         end
  1201.     end
  1202. })
  1203. local Connections2
  1204. sections.Fish:AddToggle("AutoBalanceNuke", {
  1205.     Title = "Auto Balance Nuke",
  1206.     Default = true,
  1207.     Description = "",
  1208.     Callback = function(isEnabled)
  1209.         genv.AutoBalanceNuke = isEnabled
  1210.        
  1211.         local StartMinigame
  1212.  
  1213.         if genv.getgc then
  1214.         task.spawn(function()
  1215.             for i, v in pairs(getgc(true)) do
  1216.                 if type(v) == "function" then
  1217.                     local name = debug.info(v, "n")
  1218.  
  1219.                     if name == "StartMinigame" then
  1220.                         task.spawn(function()
  1221.                             -- v()
  1222.                         end)
  1223.  
  1224.                         StartMinigame = v
  1225.                     elseif name == "LoopMinigame" then
  1226.                         if debug.setupvalue then
  1227.                             task.spawn(function()
  1228.                                 while true do
  1229.                                     if true then -- Toggle to balance nuke : )
  1230.                                         local success, result = pcall(function()
  1231.                                             debug.setupvalue(v, 13, os.clock() - 10)
  1232.                                         end)
  1233.  
  1234.                                         if not success then
  1235.                                             break
  1236.                                         end
  1237.                                     end
  1238.  
  1239.                                     task.wait()
  1240.                                 end
  1241.                             end)
  1242.                         end
  1243.                     end
  1244.                 end
  1245.             end
  1246.     end)
  1247.         else
  1248.             local LocalPlayer = game.Players.LocalPlayer
  1249.             if genv.AutoBalanceNuke then
  1250.                 task.wait(1)
  1251.                 if LocalPlayer.PlayerGui:FindFirstChild("NukeMinigame") then
  1252.                     Connections2.AutoBalanceNuke = LocalPlayer.PlayerGui.NukeMinigame.Center.Marker.Pointer.Frame:GetPropertyChangedSignal("AbsoluteRotation"):Connect(function()
  1253.                         local rot = LocalPlayer.PlayerGui.NukeMinigame.Center.Marker.Pointer.Frame.AbsoluteRotation
  1254.                         if rot < -35 then
  1255.                             VIM:SendKeyEvent(true, Enum.KeyCode.E, false, game)
  1256.                             VIM:SendKeyEvent(false, Enum.KeyCode.E, false, game)
  1257.                         elseif rot > 35 then
  1258.                             VIM:SendKeyEvent(true, Enum.KeyCode.Q, false, game)
  1259.                             VIM:SendKeyEvent(false, Enum.KeyCode.Q, false, game)
  1260.                         end
  1261.                     end)
  1262.                 end
  1263.             else
  1264.                 if Connections2.AutoBalanceNuke then
  1265.                     Connections2.AutoBalanceNuke:Disconnect()
  1266.                     Connections2.AutoBalanceNuke = nil
  1267.                 end
  1268.             end
  1269.         end
  1270.     end
  1271. })
  1272.  
  1273.  
  1274. -- sections.FishPlus:AddParagraph({Title = '<font color="#ea00ff">A</font><font color="#e100ff">d</font><font color="#d800ff">v</font><font color="#d000ff">a</font><font color="#c700ff">n</font><font color="#be00fe">c</font><font color="#b600ff">e</font><font color="#ad00ff">d</font><font color="#a400ff"> </font><font color="#9c00ff">A</font><font color="#9300ff">u</font><font color="#8a00ff">t</font><font color="#8200ff">o</font><font color="#7900ff"> </font><font color="#7000ff">F</font><font color="#6800ff">a</font><font color="#5f00ff">r</font><font color="#5700ff">m</font>', Description = "Usage:\n- Select Zone\n- Create Safe Zone\n- Freeze Character\n- Auto Cast and others.."})
  1275.  
  1276. local uniqueNames = {}
  1277. for _, descendant in ipairs(workspace.zones.fishing:GetDescendants()) do
  1278.     if descendant:FindFirstChild("CrabZone") then
  1279.         if not uniqueNames[descendant.Name] then
  1280.             uniqueNames[descendant.Name] = true
  1281.         end
  1282.     end
  1283. end
  1284.  
  1285. local zoneNames = {}
  1286. for name, _ in pairs(uniqueNames) do
  1287.     table.insert(zoneNames, name)
  1288. end
  1289.  
  1290. sections.FishPlus:AddDropdown("FishZones", {
  1291.     Title = "Fishing Zone",
  1292.     Description = "",
  1293.     Options = zoneNames,
  1294.     Default = "",
  1295.     PlaceHolder = "Select Zone",
  1296.     Multiple = false,
  1297.     Callback = function(selectedZone)
  1298.         genv.selectedZone = selectedZone
  1299.     end,
  1300. })
  1301.  
  1302. sections.FishPlus:AddDropdown("FishOverridesZones", {
  1303.     Title = "Event Overrides",
  1304.     Description = "",
  1305.     Options = {"The Depths - Serpent", "Megalodon", "Great Hammerhead Shark", "Great White Shark", "Whale Shark", "Isonade", "Bluefin Tuna Abundance", "Arapaima Abundance", "Swordfish Abundance", "Chinook Salmon Abundance", "Amberjack Abundance", "Mackerel Abundance","Ancient Algae","Mushgrove Algae","Forsaken Algae","Snowcap Algae","Golden Tide Pool"},
  1306.     Default = "This feature is a WIP, it will work in the next few days!",
  1307.     PlaceHolder = "Select Zone",
  1308.     Multiple = true,
  1309.     Callback = function(selectedEvents)
  1310.         genv.selectedEventOverrides = selectedEvents
  1311.     end,
  1312. })
  1313.  
  1314. genv.RunningFishZone = false
  1315.  
  1316. local function checkOverrides()
  1317.     for _, child in ipairs(workspace.zones.fishing:GetChildren()) do
  1318.         for _, overrideEvent in ipairs(genv.selectedEventOverrides or {}) do
  1319.             if string.find(overrideEvent:lower(), "algae") and string.find(child.Name:lower(), overrideEvent:lower()) then
  1320.                 return child
  1321.             end
  1322.         end
  1323.  
  1324.         if child:FindFirstChild("beacon") then
  1325.             local poiHeader = child:FindFirstChild("POIHeader")
  1326.             if poiHeader and poiHeader:FindFirstChild("title") and poiHeader.title:IsA("TextLabel") then
  1327.                 local titleText = poiHeader.title.Text
  1328.                 -- Match the event name using string.find
  1329.                 for _, overrideEvent in ipairs(genv.selectedEventOverrides or {}) do
  1330.                     if string.find(titleText, overrideEvent) then
  1331.                         return child -- Return the matching zone
  1332.                     end
  1333.                 end
  1334.             end
  1335.         end
  1336.  
  1337.         -- Check for abundance properties
  1338.         local abundance = child:FindFirstChild("Abundance")
  1339.         if abundance and abundance:FindFirstChild("Chance") and abundance:FindFirstChild("Mutation") then
  1340.             for _, overrideEvent in ipairs(genv.selectedEventOverrides or {}) do
  1341.                 if string.find(child.Name, overrideEvent) then
  1342.                     return child -- Return the matching zone
  1343.                 end
  1344.             end
  1345.         end
  1346.     end
  1347.     return nil -- Return nil if no match is found
  1348. end
  1349.  
  1350.  
  1351. sections.FishPlus:AddToggle("FreezeInZone", {
  1352.     Title = "Freeze In Zone",
  1353.     Default = false,
  1354.     Description = "",
  1355.     Callback = function(isEnabled)
  1356.         local player = LocalPlayer
  1357.         local character = player.Character or player.CharacterAdded:Wait()
  1358.         local humanoid = character:WaitForChild("Humanoid")
  1359.         local rootPart = character:WaitForChild("HumanoidRootPart")
  1360.         local workspace = game:GetService("Workspace")
  1361.         local oldPos = nil
  1362.  
  1363.         genv.RunningFishZone = isEnabled
  1364.         if genv.RunningFishZone then
  1365.             oldPos = rootPart.CFrame
  1366.  
  1367.             coroutine.wrap(function()
  1368.                 while genv.RunningFishZone do
  1369.                     task.wait()
  1370.                     rootPart.Velocity = Vector3.zero
  1371.                     workspace.FallenPartsDestroyHeight = 0/0
  1372.                     humanoid.PlatformStand = true
  1373.  
  1374.                     local eventZone = checkOverrides()
  1375.                     local targetZone = eventZone or workspace.zones.fishing:FindFirstChild(genv.selectedZone)
  1376.  
  1377.                     if targetZone then
  1378.                         local position = targetZone.Position
  1379.                         local size = targetZone.Size
  1380.                         if eventZone then
  1381.                             rootPart.CFrame = CFrame.new(position.X, position.Y + (size.Y / 3) - 2, position.Z)
  1382.                         else
  1383.                             rootPart.CFrame = CFrame.new(position.X, position.Y - (size.Y / 2) + 2, position.Z)
  1384.                         end
  1385.                     end
  1386.                 end
  1387.                 humanoid.PlatformStand = false
  1388.                 workspace.FallenPartsDestroyHeight = -1200
  1389.                 if oldPos then
  1390.                     rootPart.CFrame = oldPos
  1391.                 end
  1392.             end)()
  1393.         else
  1394.             genv.RunningFishZone = false
  1395.             humanoid.PlatformStand = false
  1396.             workspace.FallenPartsDestroyHeight = -1200
  1397.             if oldPos then
  1398.                 rootPart.CFrame = oldPos
  1399.             end
  1400.         end
  1401.     end,
  1402. })
  1403.  
  1404.  
  1405.  
  1406. genv.StartFishingInZone = false
  1407.  
  1408. sections.FishPlus:AddToggle("StartFishingInZone", {
  1409.     Title = "Start Fishing In Zone",
  1410.     Default = false,
  1411.     Description = "",
  1412.     Callback = function(isEnabled)
  1413.         local player = services.Players.LocalPlayer
  1414.         local character = player.Character or player.CharacterAdded:Wait()
  1415.         local head = character:WaitForChild("Head")
  1416.  
  1417.         genv.StartFishingInZone = isEnabled
  1418.         while genv.StartFishingInZone do
  1419.             task.wait()
  1420.  
  1421.             -- Find the fishing rod and its bobber
  1422.             local rod = character:FindFirstChild(PlayerStats.rod.Value)
  1423.             if rod then
  1424.                 local bobber = rod:FindFirstChild("bobber")
  1425.                 if bobber then
  1426.                    
  1427.                     local eventZone = checkOverrides()
  1428.                     local targetZone = eventZone or workspace.zones.fishing:FindFirstChild(genv.selectedZone)
  1429.  
  1430.                     if targetZone then
  1431.                         if eventZone then
  1432.                             local targetPosition = targetZone.Position
  1433.                             local targetSize = targetZone.Size
  1434.                             local surfacePos = Vector3.new(
  1435.                                 targetPosition.X,
  1436.                                 targetPosition.Y + (targetSize.Y / 2), -- Top surface
  1437.                                 targetPosition.Z
  1438.                             )
  1439.                             bobber.CFrame = CFrame.new(surfacePos)
  1440.                         else
  1441.                             -- For regular fish, place the bobber above the player's head
  1442.                             local bobberPos = head.Position + Vector3.new(0, 2, 0) -- 2 studs above the head
  1443.                             bobber.CFrame = CFrame.new(bobberPos)
  1444.                         end
  1445.                     end
  1446.                 end
  1447.             end
  1448.         end
  1449.     end
  1450. })
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459. genv.AutoBestiaryParagraph = sections.FishPlus:AddParagraph({
  1460.     Title = gradient("Auto Bestiary"),
  1461.     Description = "<font color=\"rgb(255, 0, 0)\">NOTE: Auto Bestiary was rushed, expect bugs. You need to use reinforced rod.</font>"
  1462. })
  1463.  
  1464. sections.FishPlus:AddToggle("AutoBestiary", {
  1465.     Title = "Auto Bestiary",
  1466.     Default = false,
  1467.     Description = "Automatically complete the bestiary by fishing in required zones.",
  1468.     Callback = function(isEnabled)
  1469.         genv.AutoBestiaryEnabled = isEnabled
  1470.  
  1471.         if genv.AutoBestiaryEnabled then
  1472.             coroutine.wrap(function()
  1473.                 local player = services.Players.LocalPlayer
  1474.                 local character = player.Character or player.CharacterAdded:Wait()
  1475.                 local humanoid = character:WaitForChild("Humanoid")
  1476.                 local rootPart = character:WaitForChild("HumanoidRootPart")
  1477.                 local workspace = game:GetService("Workspace")
  1478.                 local replicatedStorage = services.ReplicatedStorage
  1479.                 local bestiary = replicatedStorage.playerstats[player.Name].Bestiary
  1480.  
  1481.                 -- Load fish data
  1482.                 local data = loadstring(game:HttpGet("https://raw.githubusercontent.com/Catto-YFCN/GoofyData/refs/heads/main/data"))()
  1483.                 local allFish = {}
  1484.                 if type(data.Fish) == "table" then
  1485.                     for fishName, fishData in pairs(data.Fish) do
  1486.                         allFish[fishName] = fishData.From or "Unknown"
  1487.                     end
  1488.                 end
  1489.  
  1490.                 -- Zone Failsafe Map
  1491.                 local zoneFailsafeMap = {
  1492.                     Snowcap = "Snowcap Ocean",
  1493.                     Terrapin = "Terrapin Ocean",
  1494.                     Roslit = "Roslit Bay Clam",
  1495.                     ["Roslit Volcano"] = "Lava",
  1496.                     Mushgrove = "Mushgrove Water",
  1497.                     Moosewood = "Moosewood Ocean",
  1498.                     ["Ancient Isle"] = "Ancient Isle Ocean"
  1499.                 }
  1500.  
  1501.                 local function getUncompletedFish()
  1502.                     local completedFish = {}
  1503.                     for _, entry in ipairs(bestiary:GetChildren()) do
  1504.                         completedFish[entry.Name] = true
  1505.                     end
  1506.  
  1507.                     local uncompletedFish = {}
  1508.                     for fishName, zone in pairs(allFish) do
  1509.                         -- Skip fish with "N/A" zone
  1510.                         if not completedFish[fishName] and zone ~= "N/A" then
  1511.                             table.insert(uncompletedFish, { name = fishName, zone = zone })
  1512.                         end
  1513.                     end
  1514.  
  1515.                     return uncompletedFish
  1516.                 end
  1517.  
  1518.                 local function findZone(zoneName)
  1519.                     -- Check for zone and fallback
  1520.                     local zone = workspace.zones.fishing:FindFirstChild(zoneName)
  1521.                     if not zone and zoneFailsafeMap[zoneName] then
  1522.                         zone = workspace.zones.fishing:FindFirstChild(zoneFailsafeMap[zoneName])
  1523.                     end
  1524.                     return zone
  1525.                 end
  1526.  
  1527.                 local function freezeCharacter(position)
  1528.                     humanoid.PlatformStand = true
  1529.                     rootPart.Velocity = Vector3.zero
  1530.                     rootPart.CFrame = CFrame.new(position)
  1531.                 end
  1532.  
  1533.                 while genv.AutoBestiaryEnabled do
  1534.                     task.wait()
  1535.  
  1536.                     local uncompletedFish = getUncompletedFish()
  1537.                     if #uncompletedFish == 0 then
  1538.                         print("All bestiary entries are completed!")
  1539.                         break
  1540.                     end
  1541.  
  1542.                     -- Get the next fish to complete
  1543.                     local nextFish = uncompletedFish[1]
  1544.                     print("Fishing for: " .. nextFish.name .. " in zone: " .. nextFish.zone)
  1545.                     genv.AutoBestiaryParagraph:SetDesc("<font color=\"rgb(255, 0, 0)\">NOTE: Auto Bestiary is new and was rushed, expect bugs. </font>\n<font color=\"rgb(255, 255, 255)\">Fishing for: </font>" .. nextFish.name .. "\n<font color=\"rgb(255, 255, 255)\">Zone: </font>" .. nextFish.zone)
  1546.  
  1547.  
  1548.                     -- Find the required zone
  1549.                     local targetZone = findZone(nextFish.zone)
  1550.                     if targetZone then
  1551.                         local targetPosition = targetZone.Position
  1552.                         local targetSize = targetZone.Size
  1553.                         local zonePosition = Vector3.new(
  1554.                             targetPosition.X,
  1555.                             targetPosition.Y + (targetSize.Y / 2),
  1556.                             targetPosition.Z
  1557.                         )
  1558.  
  1559.                         -- Move to zone and freeze
  1560.                         rootPart.CFrame = CFrame.new(zonePosition)
  1561.                         task.wait(1) -- Allow some time for positioning
  1562.                         freezeCharacter(zonePosition)
  1563.  
  1564.                         while genv.AutoBestiaryEnabled and #getUncompletedFish() > 0 do
  1565.                             task.wait()
  1566.  
  1567.                             local rod = character:FindFirstChild(getEquippedRod())
  1568.                             if rod then
  1569.                                 local bobber = rod:FindFirstChild("bobber")
  1570.                                 if bobber then
  1571.                                     -- Simulate casting the rod
  1572.                                     bobber.CFrame = CFrame.new(zonePosition)
  1573.                                 end
  1574.                             end
  1575.  
  1576.                             -- Ensure character stays in place
  1577.                             freezeCharacter(zonePosition)
  1578.                         end
  1579.                     else
  1580.                         warn("Zone not found for: " .. nextFish.zone)
  1581.                     end
  1582.                 end
  1583.  
  1584.                 -- Reset character state when Auto Bestiary stops
  1585.                 humanoid.PlatformStand = false
  1586.                 print("Auto Bestiary completed or stopped.")
  1587.             end)()
  1588.         else
  1589.             -- Disable Auto Bestiary
  1590.             genv.AutoBestiaryEnabled = false
  1591.             print("Auto Bestiary disabled.")
  1592.         end
  1593.     end,
  1594. })
  1595.  
  1596.  
  1597.  
  1598.  
  1599. -- sections.FishPlus:AddButton({
  1600. --     Title = "Create Safe Zone",
  1601. --     Variant = "Primary",
  1602. --     Callback = function()
  1603. --         local SafeZone = Instance.new("Part")
  1604. --         SafeZone.Size = Vector3.new(15, 1, 15)
  1605. --         SafeZone.Position = Vector3.new(math.random(-2000,2000), math.random(50000,90000), math.random(-2000,2000))
  1606. --         SafeZone.Anchored = true
  1607. --         SafeZone.BrickColor = BrickColor.new("Royal purple")
  1608. --         SafeZone.Material = Enum.Material.ForceField
  1609. --         SafeZone.Parent = game.Workspace
  1610. --         LocalPlayer.Character.HumanoidRootPart.CFrame = SafeZone.CFrame + Vector3.new(0, 5, 0)
  1611. --     end,
  1612. -- })
  1613.  
  1614.  
  1615. genv.BaitParagraph = sections.FishBait:AddParagraph({
  1616.     Title = gradient("Optimal Bait:"),
  1617.     Description = "Info"
  1618. })
  1619.  
  1620. sections.FishBait:AddDropdown("FishBait", {
  1621.     Title = "Prioritized Bait",
  1622.     Description = "Most & Least uses the baits you have the most or least of.",
  1623.     Options = {"Most", "Least", "Lure Speed", "Luck", "Universal Luck", "Resilience"},
  1624.     Default = "",
  1625.     PlaceHolder = "Select Bait",
  1626.     Multiple = false,
  1627.     Callback = function(selectedBait)
  1628.         genv.SelectedBait = selectedBait
  1629.         if genv.SelectedBait == "Lure Speed" then
  1630.             genv.SelectedBait = "LureSpeed"
  1631.         elseif genv.SelectedBait == "Universal Luck" then
  1632.             genv.SelectedBait = "GenerelLuck"
  1633.         end
  1634.     end
  1635. })
  1636.  
  1637.  
  1638.  
  1639. genv.AutoBaitToggle = sections.FishBait:AddToggle("Auto Bait", {
  1640.     Title = "Auto Bait",
  1641.     Default = false,
  1642.     Description = "",
  1643.     Callback = function(isEnabled)
  1644.         genv.AutoBait = isEnabled
  1645.         while genv.AutoBait do
  1646.             local bait = ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.bait
  1647.             availableBaits = {}
  1648.  
  1649.             for _, child in ipairs(bait:GetChildren()) do
  1650.                 if child.Value ~= 0 then
  1651.                     local baitName = string.sub(child.Name, 6) -- Remove the "bait_" prefix
  1652.                     table.insert(availableBaits, baitName)
  1653.                 end
  1654.             end
  1655.  
  1656.             determineBestBait()
  1657.             wait(1)
  1658.         end
  1659.     end
  1660. })
  1661.  
  1662. -- local giantBarConnection
  1663.  
  1664. -- sections.FishSettings:AddToggle("GiantBar", {
  1665. --     Title = "Giant Reel Bar",
  1666. --     Default = false,
  1667. --     Description = "Broken",
  1668. --     Callback = function(isEnabled)
  1669. --         genv.GiantBar = isEnabled
  1670.  
  1671. --         if giantBarConnection then
  1672. --             giantBarConnection:Disconnect()
  1673. --             giantBarConnection = nil
  1674. --         end
  1675.  
  1676. --         if isEnabled then
  1677. --             local playerGui = LocalPlayer.PlayerGui
  1678. --             giantBarConnection = playerGui.ChildAdded:Connect(function(child)
  1679. --                 if child.Name == "reel" then
  1680. --                     local playerBar = child:FindFirstChild("bar") and child.bar:FindFirstChild("playerbar")
  1681. --                     if playerBar then
  1682. --                         task.wait(0.3)
  1683. --                         playerBar.Size = UDim2.new(1, 0, 1.3, 0)
  1684. --                         playerBar.Position = UDim2.new(0.5, 0, 0.5, 0)
  1685. --                     end
  1686. --                 end
  1687. --             end)
  1688.  
  1689. --             -- Apply changes to existing reel, if any
  1690. --             local reel = playerGui:FindFirstChild("reel")
  1691. --             if reel then
  1692. --                 local playerBar = reel:FindFirstChild("bar") and reel.bar:FindFirstChild("playerbar")
  1693. --                 if playerBar then
  1694. --                     playerBar.Size = UDim2.new(1, 0, 1.3, 0)
  1695. --                     playerBar.Position = UDim2.new(0.5, 0, 0.5, 0)
  1696. --                 end
  1697. --             end
  1698. --         end
  1699. --     end
  1700. -- })
  1701.  
  1702.  
  1703. -- local playerBar = LocalPlayer.PlayerGui:FindFirstChild("reel"):FindFirstChild("bar"):FindFirstChild("playerbar")
  1704. -- if playerBar then
  1705. --     playerBar.Size = UDim2.new(1, 0, 1.3, 0)
  1706. --     playerBar.Position = UDim2.new(0.5, 0, 0.5, 0)
  1707. -- end
  1708.  
  1709. sections.FishSettings:AddToggle("PerfectCatch", {
  1710.     Title = "Perfect Catch",
  1711.     Default = true,
  1712.     Description = "",
  1713.     Callback = function(isEnabled)
  1714.         genv.PerfectCatch = isEnabled
  1715.     end,
  1716. })
  1717.  
  1718. sections.FishSettings:AddSlider("AutoShakeDelay", {
  1719.     Title = "Auto Shake Delay",
  1720.     Description = "Set this to 0 if you want super fast.",
  1721.     Default = 0,
  1722.     Min = 0,
  1723.     Max = 100,
  1724.     Increment = 1,
  1725.     Callback = function(value)
  1726.         variables.AutoShakeDelay = value * 0.001
  1727.         -- print(variables.AutoShakeDelay)
  1728.     end,
  1729. })
  1730.  
  1731. sections.FishSettings:AddSlider("AutoCastPower", {
  1732.     Title = "Auto Cast Power",
  1733.     Description = "",
  1734.     Default = 100,
  1735.     Min = 1,
  1736.     Max = 100,
  1737.     Increment = 1,
  1738.     Callback = function(value)
  1739.         variables.autoCastPower = value
  1740.     end,
  1741. })
  1742.  
  1743. sections.FishSettings:AddSlider("AutoCastDelay", {
  1744.     Title = "Auto Cast Delay",
  1745.     Description = "This is in 100ms increments (0.1s)",
  1746.     Default = 5,
  1747.     Min = 0,
  1748.     Max = 20,
  1749.     Increment = 1,
  1750.     Callback = function(value)
  1751.         variables.AutoCastDelay = value * 0.1
  1752.         -- print(variables.AutoShakeDelay)
  1753.     end,
  1754. })
  1755.  
  1756. sections.FishSettings:AddDropdown("FischShakeMethod", {
  1757.     Title = "Auto Shake Method",
  1758.     Description = "",
  1759.     Options = {"Navigation","Click"},
  1760.     Default = "Navigation",
  1761.     PlaceHolder = "Select Method",
  1762.     Multiple = false,
  1763.     Callback = function(selectedOptions)
  1764.         if selectedOptions == "Navigation" then
  1765.             variables.Method1 = false
  1766.         elseif selectedOptions == "Click" then
  1767.             variables.Method1 = true
  1768.         end
  1769.     end
  1770. })
  1771.  
  1772. sections.FishSettings:AddDropdown("FischCatchMethod", {
  1773.     Title = "Auto Reel Method",
  1774.     Description = "",
  1775.     Options = {"Instant","Follow Bar"},
  1776.     Default = "Instant",
  1777.     PlaceHolder = "Select Method",
  1778.     Multiple = false,
  1779.     Callback = function(selectedOptions)
  1780.         if selectedOptions == "Instant" then
  1781.             variables.ReelMethod1 = false
  1782.         elseif selectedOptions == "Follow Bar" then
  1783.             variables.ReelMethod1 = true
  1784.         end
  1785.     end
  1786. })
  1787.  
  1788. sections.FishSettings:AddSlider("SnapChance", {
  1789.     Title = "Snap Chance",
  1790.     Description = "",
  1791.     Default = 0,
  1792.     Min = 0,
  1793.     Max = 100,
  1794.     Increment = 1,
  1795.     Callback = function(value)
  1796.         variables.snapChance = value
  1797.     end,
  1798. })
  1799.  
  1800. -- ill finish it tmr
  1801. sections.FishSettings:AddDropdown("IgnoreSnapRarity", {
  1802.     Title = "Ignore Snap Rarity",
  1803.     Description = "",
  1804.     Options = {"Trash", "Common", "Rare", "Legendary", "Mythical", "Unusual", "Limited"},
  1805.     Default = "",
  1806.     PlaceHolder = "Select Rarity",
  1807.     Multiple = false,
  1808.     Callback = function(selectedOptions)
  1809.         if selectedOptions == "Instant" then
  1810.             variables.Method1 = false
  1811.         elseif selectedOptions == "Follow Bar" then
  1812.             variables.Method1 = true
  1813.         end
  1814.     end
  1815. })
  1816.  
  1817.  
  1818.  
  1819.  
  1820.  
  1821. genv.InventoryValue = sections.Item0:AddParagraph({
  1822.     Title = gradient("Inventory Information"),
  1823.     Description = "Inventory Info: <font color=\"rgb(255,0,0)\">Offline</font>\nInventory Value: <font color=\"rgb(255,0,0)\">Offline</font>\nHeld Item Value: <font color=\"rgb(255,0,0)\">Offline</font>"
  1824. })
  1825.  
  1826. sections.Item0:AddToggle("CheckValue", {
  1827.     Title = "Check Value",
  1828.     Default = false,
  1829.     Description = "Off by default because performance.",
  1830.     Callback = function(isEnabled)
  1831.         genv.CheckValue = isEnabled
  1832.     end,
  1833. })
  1834.  
  1835. function calculateInventoryValue()
  1836.     _G.totalValue = 0
  1837.     _G.handValue = 0
  1838.     _G.backpackItems = ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory:GetChildren()
  1839.  
  1840.     for _, v in ipairs(_G.backpackItems) do
  1841.         _G.itemValue = GetBackPackItemValue(v)
  1842.         if _G.itemValue then
  1843.             _G.totalValue += _G.itemValue
  1844.         end
  1845.     end
  1846.  
  1847.     local tool = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  1848.     if tool and tool:FindFirstChild("link") then
  1849.         _G.handValue = GetBackPackItemValue(tool.link.Value)
  1850.     end
  1851.  
  1852.     local favourited = 0
  1853.     local totalFish = 0
  1854.     for _, item in pairs(game.Players.LocalPlayer.Backpack:GetChildren()) do
  1855.         if not item:FindFirstChild("link") then continue end
  1856.         local link = item.link.Value
  1857.    
  1858.         if link:FindFirstChild("Favourited") then
  1859.             favourited += 1
  1860.         end
  1861.         if link:FindFirstChild("Stack") then
  1862.             totalFish += link.Stack.Value
  1863.         end
  1864.     end
  1865.    
  1866.     genv.InventoryValue:SetDesc(string.format(
  1867.         'You have <font color="#FFFFFF">%s</font> fish, <font color="#FFFF00">%s</font> favourited.\nInventory Value: <font color="#FFFDE4">%s</font>\nHeld Item Value: <font color="#FFFDE4">%s</font>',
  1868.         formatNumber(totalFish),  -- Total fish in white
  1869.         formatNumber(favourited), -- Favourited in yellow
  1870.         formatPrice(_G.totalValue),
  1871.         formatPrice(_G.handValue)
  1872.     ))    
  1873.     pcall(function()
  1874.         genv.InventoryValueGift:SetDesc(string.format(
  1875.             'You have <font color="#FFFFFF">%s</font> fish, <font color="#FFFF00">%s</font> favourited.\nInventory Value: <font color="#FFFDE4">%s</font>\nHeld Item Value: <font color="#FFFDE4">%s</font>',
  1876.             formatNumber(totalFish),  -- Total fish in white
  1877.             formatNumber(favourited), -- Favourited in yellow
  1878.             formatPrice(_G.totalValue),
  1879.             formatPrice(_G.handValue)
  1880.         ))
  1881.     end)
  1882.     return formatPrice(_G.totalValue)
  1883. end
  1884.  
  1885. function getInventoryValue()
  1886.     local totalValue = 0
  1887.     local backpackItems = ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory:GetChildren()
  1888.  
  1889.     for _, v in ipairs(backpackItems) do
  1890.         local itemValue = GetBackPackItemValue(v)
  1891.         if itemValue then
  1892.             totalValue = totalValue + itemValue  -- Use the = operator for addition
  1893.         end
  1894.     end
  1895.  
  1896.     return totalValue
  1897. end
  1898.  
  1899.  
  1900.  
  1901. task.spawn(function()
  1902.     while task.wait(1) do
  1903.         if genv.CheckValue then
  1904.             calculateInventoryValue()
  1905.         end
  1906.     end
  1907. end)
  1908.  
  1909.         local text
  1910.         local currentModel2
  1911.         genv.BobberVisuals = false
  1912.         genv.BovverTextVisualColor = Color3.new(1, 1, 1)
  1913.         genv.BobberGlow = false
  1914.         local glow
  1915.         genv.BobberGlowColor = Color3.new(255, 255, 255)
  1916.  
  1917. sections.Visuals3:AddColorpicker("BobberVisualsTextColor", {
  1918.     Title = "Bobber Visuals Text Color ",
  1919.     Default = Color3.fromRGB(255, 255, 255),
  1920.     Callback = function(selectedColor)
  1921.     genv.BovverTextVisualColor = selectedColor
  1922.     if text and genv.BobberGlow then
  1923.     text.Color = selectedColor
  1924.     end
  1925.     end,
  1926. })
  1927.  
  1928. sections.Visuals3:AddToggle("ToggleBobberVisuals", {
  1929.     Title = "Bobber Visuals",
  1930.     Default = false,
  1931.     Description = "Display Cool info on your bobber",
  1932.     Callback = function(isEnabled)
  1933. genv.BobberVisuals =  isEnabled
  1934. while genv.BobberVisuals do
  1935.     local PlayerStats = services.ReplicatedStorage.playerstats[tostring(services.Players.LocalPlayer.Name)].Stats
  1936.     local character = game.Players.LocalPlayer.Character
  1937.     local rod = character:FindFirstChild(PlayerStats.rod.Value)
  1938.  
  1939.     if rod then
  1940.         local bobber = rod:FindFirstChild("bobber")
  1941.         if bobber then
  1942.             local camera = workspace.CurrentCamera
  1943.             local screenPosition, onScreen = camera:WorldToViewportPoint(bobber.Position)
  1944.            
  1945.             if onScreen then
  1946.                 if not text then
  1947.                     text = Drawing.new("Text")
  1948.                     text.Size = 20
  1949.                     text.Color = genv.BovverTextVisualColor
  1950.                     text.Center = true
  1951.                     text.Outline = true
  1952.                     text.OutlineColor = Color3.new(0, 0, 0)
  1953.                     text.Visible = true
  1954.                 end
  1955.  
  1956.                 for _, child in ipairs(bobber:GetChildren()) do
  1957.                     if child:IsA("Model") and child.Name ~= PlayerStats.bait.Value and child.Name ~= PlayerStats.bobber.Value then
  1958.                         if currentModel2 ~= child.Name then
  1959.                             currentModel2 = child.Name
  1960.                         end
  1961.                     end
  1962.                 end
  1963.                
  1964.                 if currentModel2 and not bobber:FindFirstChild(currentModel2) then
  1965.                     currentModel2= nil
  1966.                 end
  1967.  
  1968.                 local lureText
  1969.                 if rod.values.lure.Value == 100 then
  1970.                     lureText = "Catching: " .. (currentModel2 or "Unknown")
  1971.                 else
  1972.                     lureText = "Lure: " .. string.format("%.3f", rod.values.lure.Value) .. "%"
  1973.                 end
  1974.  
  1975.                 text.Text = "Bobber | Zone: " .. tostring(rod.values.bobberzone.Value) .. " | " .. lureText
  1976.                 text.Position = Vector2.new(screenPosition.X, screenPosition.Y)
  1977.             else
  1978.                 if text then
  1979.                     text:Remove()
  1980.                     text = nil
  1981.                 end
  1982.             end
  1983.         else
  1984.             if text then
  1985.                 text:Remove()
  1986.                 text = nil
  1987.             end
  1988.         end
  1989.     else
  1990.         if text then
  1991.             text:Remove()
  1992.             text = nil
  1993.         end
  1994.     end
  1995.    
  1996.     task.wait()
  1997. end
  1998.     if text and not genv.BobberVisuals then
  1999.         text:Remove()
  2000.         text = nil
  2001.     end
  2002.     end,
  2003. })
  2004.  
  2005. sections.Visuals3:AddColorpicker("BobberVisualsTextColor", {
  2006.     Title = "Bobber Glow Color",
  2007.     Default = Color3.fromRGB(255, 255, 255),
  2008.     Callback = function(selectedColor)
  2009.         genv.BobberGlowColor = selectedColor
  2010.         if genv.BobberGlow then
  2011.             local player = services.Players.LocalPlayer
  2012.             local bobberName = services.ReplicatedStorage.playerstats[tostring(player.Name)].Stats.bobber.Value
  2013.             local character = player.Character or player.CharacterAdded:Wait()
  2014.             local rod = character:FindFirstChild(PlayerStats.rod.Value)
  2015.  
  2016.             local bobber = rod:FindFirstChild("bobber")
  2017.             if bobber then
  2018.             local bobberBobber =  bobber:FindFirstChild(bobberName)
  2019.             if bobberBobber then
  2020.                 local glowEffect = bobberBobber:FindFirstChild("Lunor_GlowEffect")
  2021.                 if glowEffect then
  2022.                     bobberBobber:FindFirstChild("Lunor_GlowEffect").OutlineColor = selectedColor
  2023.                 end
  2024.             end
  2025.             end
  2026.         end
  2027.     end,
  2028. })
  2029.  
  2030.  
  2031.  
  2032. sections.Visuals3:AddToggle("ToggleBobberGlow", {
  2033.     Title = "Bobber Glow",
  2034.     Default = false,
  2035.     Description = "Make your Bobber Glow",
  2036.     Callback = function(isEnabled)
  2037.         genv.BobberGlow = isEnabled
  2038.         while genv.BobberGlow do
  2039.             local player = services.Players.LocalPlayer
  2040.             local playerStats = services.ReplicatedStorage.playerstats[tostring(player.Name)].Stats
  2041.             local character = player.Character or player.CharacterAdded:Wait()  -- Ensure the character exists
  2042.             local rodName = playerStats.rod.Value
  2043.             local bobberName = playerStats.bobber.Value
  2044.  
  2045.             local rod = character:FindFirstChild(rodName)
  2046.             if rod then
  2047.                 local bobber = rod:FindFirstChild("bobber")
  2048.                 if bobber then
  2049.                     local bobberPart = bobber:FindFirstChild(bobberName)
  2050.                     if bobberPart and not bobberPart:FindFirstChild("Lunor_GlowEffect") then
  2051.                         local glow = Instance.new("Highlight", bobberPart)
  2052.                         glow.Name = "Lunor_GlowEffect"
  2053.                         glow.FillTransparency = 1
  2054.                         glow.OutlineColor = genv.BobberGlowColor or Color3.new(1, 1, 1)  -- Default color if not set
  2055.                     end
  2056.                 end
  2057.             end
  2058.  
  2059.             task.wait()
  2060.         end
  2061.     end,
  2062. })
  2063.  
  2064.  
  2065. -- sections.Visuals3:AddToggle("Inventory Value", {
  2066. --     Title = "Exact Inventory Value",
  2067. --     Default = true,
  2068. --     Description = "Displays a text showing the total value of items",
  2069. --     Callback = function(isEnabled)
  2070. --         if isEnabled then
  2071. --                 function calculateInventoryValue()
  2072. --                 _G.totalValue = 0
  2073. --                 _G.backpackItems = LocalPlayer.PlayerGui.hud.safezone.backpack:GetDescendants()
  2074.  
  2075. --                 for _, v in ipairs(_G.backpackItems) do
  2076. --                     if v:IsA("ValueBase") and v.Name == "item" then
  2077. --                         print(v)
  2078. --                         _G.itemValue = GetBackPackItemValue(v.Value)
  2079. --                         if _G.itemValue then
  2080. --                             _G.totalValue += _G.itemValue
  2081. --                         end
  2082. --                     end
  2083. --                 end
  2084.  
  2085. --                 genv.InventoryValue:SetDesc(string.format("Inventory Value: %s", _G.totalValue.."C$"))
  2086. --             end
  2087.  
  2088. --             calculateInventoryValue()
  2089. --             task.spawn(function()
  2090. --                 while isEnabled do
  2091. --                     calculateInventoryValue()
  2092. --                     task.wait(1)
  2093. --                 end
  2094. --             end)
  2095. --         else
  2096. --             genv.InventoryValue:SetDesc("Inventory Value: Offline")
  2097. --         end
  2098. --     end,
  2099. -- })
  2100.  
  2101.  
  2102. sections.Item:AddToggle("AutoOpenItem", {
  2103.     Title = "Auto Open Held Item",
  2104.     Default = false,
  2105.     Description = "",
  2106.     Callback = function(isEnabled)
  2107.         genv.AutoOpenItem = isEnabled
  2108.         while genv.AutoOpenItem do
  2109.             local item = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  2110.             if item then
  2111.                 item:Activate()
  2112.             else
  2113.                 lib:Notification("Auto Open Item", "No item found to activate.", 5)
  2114.                 genv.AutoOpenItem = false
  2115.                 return
  2116.             end
  2117.             task.wait()
  2118.         end
  2119.     end,
  2120. })
  2121.  
  2122.  
  2123. genv.SkinCrateToggle = sections.Item:AddToggle("AutoOpenSkinCrate", {
  2124.     Title = "Auto Open Held Skin Crate",
  2125.     Default = false,
  2126.     Description = "",
  2127.     Callback = function(isEnabled)
  2128.         genv.AutoOpenSkinCrate = isEnabled
  2129.         if genv.AutoOpenSkinCrate then
  2130.             local tool = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  2131.            
  2132.             if tool then
  2133.                 if tool.Name == "Skin Crate" then
  2134.                     local skinLink = tostring(tool.link.Value)
  2135.                     local stackValue = tonumber(ReplicatedStorage.playerstats[game.Players.LocalPlayer.Name].Inventory[skinLink].Stack.Value)
  2136.  
  2137.                     for i = 1, stackValue do
  2138.                         ReplicatedStorage.packages.Net["RF/SkinCrates/RequestSpin"]:InvokeServer()
  2139.                         task.wait(8)
  2140.  
  2141.                         if not genv.AutoOpenSkinCrate then
  2142.                             break
  2143.                         end
  2144.                     end
  2145.  
  2146.                     genv.SkinCrateToggle:Set(false)
  2147.                     lib:Notification("Auto Open Skin Crate", "Completed", 5)
  2148.  
  2149.                 else
  2150.                     lib:Notification("Auto Open Skin Crate", "You're not holding a Skin Crate...", 5)
  2151.                     genv.SkinCrateToggle:Set(false)
  2152.                 end
  2153.             else
  2154.                 lib:Notification("Auto Open Skin Crate", "You're not holding a Skin Crate...", 5)
  2155.                 genv.SkinCrateToggle:Set(false)
  2156.             end
  2157.         end
  2158.     end,
  2159. })
  2160.  
  2161.  
  2162. local validItems = {}
  2163. if type(data.Items) == "table" then
  2164.     for itemName, itemData in pairs(data.Items) do
  2165.         if itemData.Price ~= "inf" and itemData.Price ~= "No Price" then
  2166.             local formattedPrice = formatPrice(itemData.Price)
  2167.             table.insert(validItems, itemName .. " - " .. formattedPrice)
  2168.         end
  2169.     end
  2170. end
  2171.  
  2172. -- Add the valid items to the dropdown
  2173. sections.Item:AddDropdown("PurchaseItem", {
  2174.     Title = gradient("Items"),
  2175.     Description = "",
  2176.     Options = validItems,  -- Use the formatted item names and prices
  2177.     Default = "",
  2178.     PlaceHolder = "Select Item",
  2179.     Multiple = false,
  2180.     Callback = function(selectedItem)
  2181.         -- print("Selected Item:", selectedItem)
  2182.         genv.SelectedPurchaseItem = selectedItem
  2183.     end,
  2184. })
  2185.  
  2186.  
  2187. sections.Item:AddTextbox({
  2188.     Title = "Items - Amount",
  2189.     Default = "",
  2190.     Description = "",
  2191.     PlaceHolder = "Input",
  2192.     TextDisappear = false,
  2193.     Callback = function(purchaseAmount)
  2194.         genv.PurchaseItemAmount = tonumber(purchaseAmount)
  2195.         -- print(purchaseAmount)
  2196.     end
  2197. })
  2198.  
  2199. sections.Item:AddButton({
  2200.     Title = "Purchase - Item(s)",
  2201.     Callback = function()
  2202.         local itemName, formattedPrice = genv.SelectedPurchaseItem:match("^(.-) %- (.+)$")
  2203.         local price = unformatPrice(formattedPrice)
  2204.  
  2205.         if genv.PurchaseItemAmount == nil then
  2206.             genv.PurchaseItemAmount = 1
  2207.         end
  2208.  
  2209.         -- Get the item type from data.Items
  2210.         local itemType = data.Items[itemName] and data.Items[itemName].Type or "Unknown"
  2211.  
  2212.         -- Check if the player has enough coins
  2213.         if price * genv.PurchaseItemAmount > ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value then
  2214.             lib:Notification("Purchase - Item(s)", "Insufficient cash, you need " .. formatNumber(price * genv.PurchaseItemAmount) .. "$ but you have only " .. formatNumber(math.floor(ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value)) .. "$", 5)
  2215.             return
  2216.         end
  2217.         -- Fire the purchase event
  2218.         game:GetService('ReplicatedStorage').events.purchase:FireServer(itemName, itemType, nil, genv.PurchaseItemAmount)
  2219.  
  2220.         -- Notify successful purchase
  2221.         lib:Notification("Purchase - Item(s)", "Successfully purchased " .. genv.PurchaseItemAmount .. " " .. itemName, 5)
  2222.     end,
  2223. })
  2224.  
  2225.  
  2226.  
  2227. local playerRods = ReplicatedStorage.playerstats[LocalPlayer.Name].Rods
  2228.  
  2229. local playerRodsSet = {}
  2230. for _, rod in ipairs(playerRods:GetChildren()) do
  2231.     playerRodsSet[rod.Name] = true
  2232. end
  2233.  
  2234. local validRods = {}
  2235.  
  2236. if type(data.Rods) == "table" then
  2237.     for rodName, rodData in pairs(data.Rods) do
  2238.         if not playerRodsSet[rodName] and type(rodData) == "table" and rodData.Price ~= "inf" and rodData.Price ~= "No Price" then
  2239.             local formattedPrice = formatPrice(rodData.Price)
  2240.             table.insert(validRods, rodName .. " - " .. formattedPrice)
  2241.         end
  2242.     end
  2243. end
  2244.  
  2245.  
  2246. local purchaseRodDropdown = sections.Item:AddDropdown("PurchaseRod", {
  2247.     Title = gradient("Rods"),
  2248.     Description = "",
  2249.     Options = validRods,  -- Use the formatted rod names and prices
  2250.     Default = "",
  2251.     PlaceHolder = "Select Rod",
  2252.     Multiple = false,
  2253.     Callback = function(selectedRod)
  2254.         -- print(selectedRod)
  2255.         variables.SelectedPurchaseRod = selectedRod
  2256.     end,
  2257. })
  2258.  
  2259. sections.Item:AddButton({
  2260.     Title = "Purchase - Rod",
  2261.     Callback = function()
  2262.         local rodName, formattedPrice = variables.SelectedPurchaseRod:match("^(.-) %- (.+)$")
  2263.         local price = unformatPrice(formattedPrice)
  2264.  
  2265.         -- Cash check
  2266.         if price > ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value then
  2267.             lib:Notification("Purchase - Rod", "Insufficient cash, you need " .. formatNumber(tonumber(price)) .. "$ but you have only " .. formatNumber(tonumber(math.floor(ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value))) .. "$", 5)
  2268.             return -- Prevent purchase if not enough cash
  2269.         end
  2270.  
  2271.         -- Proceed with purchase
  2272.         game:GetService('ReplicatedStorage').events.purchase:FireServer(rodName, 'Rod', price, 1)
  2273.         lib:Notification("Purchase - Rod", "Successfully purchased " .. rodName, 5)
  2274.  
  2275.         -- Remove the rod from valid rods
  2276.         for i, rod in ipairs(validRods) do
  2277.             if rod:match("^" .. rodName) then
  2278.                 table.remove(validRods, i)
  2279.                 break
  2280.             end
  2281.         end
  2282.  
  2283.         -- Refresh the rod dropdown
  2284.         purchaseRodDropdown:Refresh(validRods, true)
  2285.         purchaseRodDropdown:Set(validRods)
  2286.     end,
  2287. })
  2288.  
  2289. lanternsTable = {}
  2290.  
  2291. for _, v in ipairs(ReplicatedStorage.resources.replicated.instances.lanterns:GetChildren()) do
  2292.     table.insert(lanternsTable, v.Name)
  2293. end
  2294.  
  2295. for _, v in ipairs(ReplicatedStorage.playerstats[LocalPlayer.Name].Lanterns:GetChildren()) do
  2296.     for i = #lanternsTable, 1, -1 do
  2297.         if lanternsTable[i] == v.Name then
  2298.             table.remove(lanternsTable, i)
  2299.         end
  2300.     end
  2301. end
  2302.  
  2303.  
  2304. local lanternSelected = nil
  2305.  
  2306. local LanternDropdown = sections.Item:AddDropdown("PurchaseLanter", {
  2307.     Title = gradient("Lantern"),
  2308.     Description = "",
  2309.     Options = lanternsTable,  -- Use the formatted rod names and prices
  2310.     Default = "",
  2311.     PlaceHolder = "Select Lantern",
  2312.     Multiple = false,
  2313.     Callback = function(selectedRod)
  2314.         lanternSelected = selectedRod
  2315.     end,
  2316. })
  2317.  
  2318. sections.Item:AddTextbox({
  2319.     Title = "Lantern - Amount",
  2320.     Default = "",
  2321.     Description = "",
  2322.     PlaceHolder = "Input",
  2323.     TextDisappear = false,
  2324.     Callback = function(purchaseAmount)
  2325.         genv.PurchaseLanternAmount = tonumber(purchaseAmount)
  2326.     end
  2327. })
  2328.  
  2329. sections.Item:AddButton({
  2330.     Title = "Purchase - Lantern(s)",
  2331.     Callback = function()
  2332.         if  genv.PurchaseLanternAmount == nil then
  2333.             genv.PurchaseLanternAmount = 1
  2334.         end
  2335.         if ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value < genv.PurchaseLanternAmount * 500 then
  2336.             lib:Notification(
  2337.                 "Auto Buy Lantern",
  2338.                 "Insufficient cash, you need " .. formatNumber(genv.PurchaseLanternAmount * 500) .. "$ but you have only " .. formatNumber(math.floor(ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value)) .. "$",
  2339.                 5
  2340.             )
  2341.             return
  2342.         end
  2343.  
  2344.         lib:Notification("Purchase - Item(s)", "Starting purchase of " .. genv.PurchaseLanternAmount, 5)
  2345.  
  2346.         for i = 1, genv.PurchaseLanternAmount do
  2347.             local success, err = pcall(function()
  2348.                 workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Mods Latern Keeper"):WaitForChild("mods lantern"):WaitForChild("purchase"):InvokeServer()
  2349.             end)
  2350.  
  2351.             if not success then
  2352.                 lib:Notification("Purchase Error", "Failed to purchase lantern: " .. err, 5)
  2353.                 return
  2354.             end
  2355.         end
  2356.         lib:Notification("Purchase - Lantern(s)", "Successfully purchased " .. genv.PurchaseLanternAmount, 5)
  2357.     end,
  2358. })
  2359.  
  2360. genv.AutoBuyLantern = sections.Item:AddToggle("AutoBuyLantern", {
  2361.     Title = "Auto Buy Lantern Till Selected",
  2362.     Default = false,
  2363.     Description = "",
  2364.     Callback = function(isEnabled)
  2365.         while isEnabled do
  2366.             if ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value < 500 then
  2367.                 lib:Notification("Auto Buy Lantern", "Insufficient cash, you need " .. formatNumber(tonumber(500)) .. "$ but you have only " .. formatNumber(tonumber(math.floor(ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value))) .. "$", 5)
  2368.                 genv.AutoBuyLantern:Set(false)
  2369.                 return
  2370.             end
  2371.  
  2372.             local lanterns = ReplicatedStorage.playerstats[LocalPlayer.Name].Lanterns:GetChildren()
  2373.             local foundLantern = false
  2374.             for _, v in ipairs(lanterns) do
  2375.                 if v.Name == lanternSelected then
  2376.                     foundLantern = true
  2377.                     break
  2378.                 end
  2379.             end
  2380.  
  2381.             if foundLantern then
  2382.                 lib:Notification("Auto Buy Lantern", "Lantern '" .. lanternSelected .. "' has been successfully acquired.", 5)
  2383.                 genv.AutoBuyLantern:Set(false)
  2384.                 break
  2385.             end
  2386.  
  2387.             if isEnabled then
  2388.                 local success, err = pcall(function()
  2389.                     workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Mods Latern Keeper"):WaitForChild("mods lantern"):WaitForChild("purchase"):InvokeServer()
  2390.                 end)
  2391.  
  2392.                 if not success then
  2393.                     lib:Notification("Purchase Error", "Failed to purchase lantern: " .. err, 5)
  2394.                     genv.AutoBuyLantern:Set(false)
  2395.                     return
  2396.                 end
  2397.             else
  2398.                 genv.AutoBuyLantern:Set(false)
  2399.             end
  2400.  
  2401.             task.wait()
  2402.         end
  2403.     end,
  2404. })
  2405.  
  2406. local formattedOptions = {}
  2407.  
  2408. -- Format the options using the provided formatPrice function
  2409. for crateName, crateData in pairs(data.SkinCrates) do
  2410.     local formattedPrice = formatPrice(crateData.Price)
  2411.     table.insert(formattedOptions, crateName .. " - " .. formattedPrice)
  2412. end
  2413.  
  2414. local SelectedCrate = nil
  2415. local SelectedCrateAmount = 1
  2416.  
  2417. sections.Item:AddDropdown("PurchaseCrates", {
  2418.     Title = gradient("Skin Crates"),
  2419.     Description = "",
  2420.     Options = formattedOptions,  -- Use the formatted options from data.SkinCrates
  2421.     Default = "",
  2422.     PlaceHolder = "Select a Skin Crate ",
  2423.     Multiple = false,
  2424.     Callback = function(selectedRod)
  2425.         SelectedCrate = selectedRod:split(" - ")[1]
  2426.     end,
  2427. })
  2428.  
  2429. sections.Item:AddTextbox({
  2430.     Title = "Skin Crates - Amount",
  2431.     Default = "",
  2432.     Description = "",
  2433.     PlaceHolder = "Input",
  2434.     TextDisappear = false,
  2435.     Callback = function(purchaseAmount)
  2436.         SelectedCrateAmount = tonumber(purchaseAmount)
  2437.     end
  2438. })
  2439.  
  2440. sections.Item:AddButton({
  2441.     Title = "Purchase - Skin Crate(s)",
  2442.     Callback = function()
  2443.         if SelectedCrateAmount == nil then
  2444.             SelectedCrateAmount = 1
  2445.         end
  2446.         for i = 1, SelectedCrateAmount do
  2447.             local success, err = pcall(function()
  2448.                 ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RF/SkinCrates/Purchase"):InvokeServer(SelectedCrate)
  2449.                 task.wait(0.2)
  2450.             end)
  2451.  
  2452.             if not success then
  2453.                 lib:Notification("Purchase Error", "Failed to purchase Skin Crates: " .. err, 5)
  2454.                 return -- Exit the loop if there's an error
  2455.             end
  2456.         end
  2457.  
  2458.         lib:Notification("Purchase - Skin Crate(s)", "Successfully purchased " .. SelectedCrateAmount, 5)
  2459.     end,
  2460. })
  2461.  
  2462.  
  2463.  
  2464. sections.Item:AddDropdown("PurchaseMerlin", {
  2465.     Title = gradient("Merlin"),
  2466.     Description = "",
  2467.     Options = {"Enchant Relic","Luck"},
  2468.     Default = "",
  2469.     Multiple = false,
  2470.     PlaceHolder = "Select Magic",
  2471.     Callback = function(selectedMerlin)
  2472.         variables.SelectedPurchaseMerlin = selectedMerlin
  2473.     end
  2474. })
  2475.  
  2476. genv.AutoBuyLuckToggle = sections.Item:AddToggle("AutoBuyMerlinLuck", {
  2477.     Title = "Auto Buy Luck",
  2478.     Default = false,
  2479.     Description = "",
  2480.     Callback = function(isEnabled)
  2481.         variables.AutoBuyMerlinLuck = isEnabled
  2482.         while variables.AutoBuyMerlinLuck do
  2483.             if not LocalPlayer.PlayerGui.hud.safezone.statuses:FindFirstChild("statusUI") then
  2484.                 workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Merlin"):WaitForChild("Merlin"):WaitForChild("luck"):InvokeServer()
  2485.             end
  2486.             if ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value < 5000 then
  2487.                 lib:Notification("Auto Buy Luck", "Insufficient cash, you need " .. formatNumber(tonumber(5000)) .. "$ but you have only " .. formatNumber(tonumber(math.floor(ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value))) .. "$", 5)
  2488.                 genv.AutoBuyLuckToggle:Set(false)
  2489.                 return
  2490.             end
  2491.             wait(1)
  2492.             if not variables.AutoBuyMerlinLuck then break end
  2493.         end
  2494.     end,
  2495. })
  2496.  
  2497. sections.Item:AddButton({
  2498.     Title = "Purchase - Merlin",
  2499.     Callback = function()
  2500.         if variables.SelectedPurchaseMerlin == "Enchant Relic" then
  2501.             if ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value < 11000 then
  2502.                 lib:Notification("Purchase - Merlin", "Insufficient cash, you need " .. formatNumber(tonumber(11000)) .. "$ but you have only " .. formatNumber(tonumber(math.floor(ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value))) .. "$", 5)
  2503.                 return -- Prevent purchase if not enough cash
  2504.             end
  2505.             workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Merlin"):WaitForChild("Merlin"):WaitForChild("power"):InvokeServer()
  2506.         elseif variables.SelectedPurchaseMerlin == "Luck" then
  2507.             if ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value < 5000 then
  2508.                 lib:Notification("Purchase - Merlin", "Insufficient cash, you need " .. formatNumber(tonumber(5000)) .. "$ but you have only " .. formatNumber(tonumber(math.floor(ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value))) .. "$", 5)
  2509.                 return -- Prevent purchase if not enough cash
  2510.             end
  2511.             workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Merlin"):WaitForChild("Merlin"):WaitForChild("luck"):InvokeServer()
  2512.         end
  2513.         lib:Notification("Purchase - Merlin","Successfully purchased " .. variables.SelectedPurchaseMerlin, 5)
  2514.     end,
  2515. })
  2516.  
  2517. sections.Item5:AddParagraph({Title = gradient("Selling")})
  2518. sections.Item5:AddToggle("AutoSell", {
  2519.     Title = "Auto Sell",
  2520.     Default = false,
  2521.     Description = "",
  2522.     Callback = function(isEnabled)
  2523.         variables.autoselling = isEnabled
  2524.         if isEnabled then
  2525.             coroutine.wrap(function()
  2526.                 while variables.autoselling do
  2527.                     pcall(function()
  2528.                         ReplicatedStorage.events.SellAll:InvokeServer()
  2529.                     end)
  2530.                     task.wait(variables.autoSellDelay)
  2531.                     if not variables.autoselling then break end
  2532.                 end
  2533.             end)()
  2534.         end
  2535.     end,
  2536. })
  2537.  
  2538.  
  2539.  
  2540. sections.Item5:AddSlider("Auto Sell Delay", {
  2541.     Title = "Auto Sell Delay [Seconds]",
  2542.     Description = "",
  2543.     Default = 60,
  2544.     Min = 0,
  2545.     Max = 600,
  2546.     Increment = 1,
  2547.     Callback = function(value)
  2548.         variables.autoSellDelay = value
  2549.     end,
  2550. })
  2551.  
  2552. local sellFishGroupButton = sections.Item5:AddGroupButton()
  2553.  
  2554. sellFishGroupButton:AddButton({
  2555.     Title = "Sell All",
  2556.     Variant = "Primary",
  2557.     Callback = function()
  2558.         ReplicatedStorage.events.SellAll:InvokeServer()
  2559.     end,
  2560. })
  2561.  
  2562. sellFishGroupButton:AddButton({
  2563.     Title = "Sell Hand",
  2564.     Variant = "Primary",
  2565.     Callback = function()
  2566.         ReplicatedStorage.events.Sell:InvokeServer()
  2567.     end,
  2568. })
  2569.  
  2570. sections.Item5:AddToggle("AutoSellHand", {
  2571.     Title = "Auto Sell Held Item",
  2572.     Default = false,
  2573.     Description = "",
  2574.     Callback = function(isEnabled)
  2575.         variables.autosellingHand = isEnabled
  2576.         while isEnabled do
  2577.             ReplicatedStorage.events.Sell:InvokeServer()
  2578.             task.wait()
  2579.         end
  2580.     end,
  2581. })
  2582.  
  2583. sections.Item5:AddParagraph({Title = gradient("Favouriting")})
  2584.  
  2585. local fishNames = {}
  2586. if type(data.Fish) == "table" then
  2587.     for fishName, fishData in pairs(data.Fish) do
  2588.         table.insert(fishNames, fishName)
  2589.     end
  2590. end
  2591.  
  2592. sections.Item5:AddDropdown("FishFavSelectDropDown", {
  2593.     Title = "Select Fishes",
  2594.     Description = "",
  2595.     Options = fishNames,
  2596.     Default = "",
  2597.     PlaceHolder = "Select Fish(s)",
  2598.     Multiple = true,
  2599.     Callback = function(selectedFishes)
  2600.         genv.SelectedFishes = selectedFishes
  2601.        
  2602.         -- Convert the selectedFishes table to a string and print it
  2603.         local selectedFishesStr = table.concat(selectedFishes, ", ")
  2604.         print("Selected Fishes: " .. selectedFishesStr)
  2605.     end,
  2606. })
  2607.  
  2608.  
  2609.  
  2610. local connection
  2611.  
  2612. sections.Item5:AddToggle("AutoFav", {
  2613.     Title = "Auto Favourite",
  2614.     Default = false,
  2615.     Description = "",
  2616.     Callback = function(isEnabled)
  2617.         genv.AutoFav = isEnabled
  2618.         if connection then
  2619.             connection:Disconnect()
  2620.         end
  2621.         if genv.AutoFav then
  2622.             connection = LocalPlayer.Backpack.ChildAdded:Connect(function(child)
  2623.                 if table.find(genv.SelectedFishes, child.Name) then
  2624.                     LocalPlayer.PlayerGui.hud.safezone.backpack.events.favourite:FireServer(child)
  2625.                 end
  2626.             end)
  2627.         end
  2628.     end,
  2629. })
  2630.  
  2631. local favFishGroupButton = sections.Item5:AddGroupButton()
  2632.  
  2633. favFishGroupButton:AddButton({
  2634.     Title = "Fav All",
  2635.     Variant = "Primary",
  2636.     Callback = function()
  2637.         for _, item in pairs(game.Players.LocalPlayer.Backpack:GetChildren()) do
  2638.             if not item:FindFirstChild("link") then continue end
  2639.             local link = item.link.Value
  2640.        
  2641.             if not link:FindFirstChild("Favourited") then
  2642.                 services.ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RE/Backpack/Favourite"):FireServer(item)
  2643.             end
  2644.         end
  2645.     end,
  2646. })
  2647.  
  2648.  
  2649.  
  2650. favFishGroupButton:AddButton({
  2651.     Title = "Unfav All",
  2652.     Variant = "Primary",
  2653.     Callback = function()
  2654.         for _, item in pairs(game.Players.LocalPlayer.Backpack:GetChildren()) do
  2655.             if not item:FindFirstChild("link") then continue end
  2656.             local link = item.link.Value
  2657.        
  2658.             if link:FindFirstChild("Favourited") then
  2659.                 services.ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RE/Backpack/Favourite"):FireServer(item)
  2660.             end
  2661.         end
  2662.     end,
  2663. })
  2664.  
  2665.  
  2666.  
  2667. genv.AppraiseParagraph = sections.Item1:AddParagraph({Title = "", Description = "Info"})
  2668.  
  2669. local mutationNames = {}
  2670.  
  2671. -- Assuming `Mutations` holds the mutation data
  2672. if type(data.Mutations) == "table" then
  2673.     for mutationName, mutationData in pairs(data.Mutations) do
  2674.         -- Debugging: Print the Chance value to check its format
  2675.         -- print(mutationName, mutationData.Chance)
  2676.  
  2677.         -- Check if the Chance value is not "0"
  2678.         if mutationData.Chance ~= "0" then
  2679.             -- Add mutation name to the list if Chance is not "0"
  2680.             table.insert(mutationNames, mutationName)
  2681.         end
  2682.     end
  2683. end
  2684.  
  2685. -- Function to convert RGB to rich text
  2686. local function rgbToRichText(rgbString, text)
  2687.     -- Split the RGB string into individual components
  2688.     local r, g, b = rgbString:match("([^,]+),([^,]+),([^,]+)")
  2689.     r, g, b = tonumber(r), tonumber(g), tonumber(b)
  2690.  
  2691.     -- Return the text in rich text format with the specified RGB color
  2692.     return string.format("<font color=\"rgb(%d,%d,%d)\">%s</font>", r * 255, g * 255, b * 255, text)
  2693. end
  2694.  
  2695. local function updateAppraiseDescription()
  2696.     local selectedMutation = genv.SelectedMutation or {}
  2697.     local selectedMutationText = ""
  2698.  
  2699.     -- If there are multiple selected mutations, display them as "Name/Name" with colors
  2700.     if #selectedMutation > 0 then
  2701.         local coloredMutations = {}
  2702.         for _, mutationName in ipairs(selectedMutation) do
  2703.             local mutationData = data.Mutations[mutationName]
  2704.             local mutationColor = mutationData and mutationData.Color or "1,1,1" -- Default to white if no color is defined
  2705.             table.insert(coloredMutations, rgbToRichText(mutationColor, mutationName))
  2706.         end
  2707.         selectedMutationText = table.concat(coloredMutations, "/")
  2708.     end
  2709.  
  2710.     -- Calculate chance and value multiplier for the selected mutation
  2711.     local totalChance = 0
  2712.     for _, mutationName in pairs(mutationNames) do
  2713.         local mutation = data.Mutations[mutationName]
  2714.         if mutation and mutation.Chance and mutation.Chance ~= "0" then
  2715.             totalChance = totalChance + tonumber(mutation.Chance)
  2716.         end
  2717.     end
  2718.     local selectedMutationData = data.Mutations[selectedMutation[1]] -- Assume the first selected mutation for chance calculation
  2719.     local selectedChance = selectedMutationData and selectedMutationData.Chance or "0"
  2720.     local chancePercentage = tonumber(selectedChance) / totalChance * 100
  2721.     local formattedChance = string.format("%.2f", chancePercentage)
  2722.     local mutationPrice = selectedMutationData and selectedMutationData.PriceMultiply or "N/A"
  2723.  
  2724.     -- Build the `SelectedMutationPlus` description
  2725.     local result = {}
  2726.     local hasSparkling, hasShiny, hasBig, hasGiant = false, false, false, false
  2727.  
  2728.     -- Check if SelectedMutationPlus exists and is not empty
  2729.     if genv.SelectedMutationPlus and #genv.SelectedMutationPlus > 0 then
  2730.         for _, mutation in ipairs(genv.SelectedMutationPlus) do
  2731.             if mutation == "Sparkling" then
  2732.                 hasSparkling = true
  2733.             elseif mutation == "Shiny" then
  2734.                 hasShiny = true
  2735.             elseif mutation == "Big" then
  2736.                 hasBig = true
  2737.             elseif mutation == "Giant" then
  2738.                 hasGiant = true
  2739.             end
  2740.         end
  2741.  
  2742.         if hasSparkling and hasShiny then
  2743.             table.insert(result, "<font color='#fff0bc'>Sparkling, Shiny</font>")
  2744.         elseif hasSparkling then
  2745.             table.insert(result, "<font color='#fff0bc'>Sparkling</font>")
  2746.         elseif hasShiny then
  2747.             table.insert(result, "<font color='#fff0bc'>Shiny</font>")
  2748.         end
  2749.  
  2750.         if hasBig and hasGiant then
  2751.             table.insert(result, "<font color='#8bff89'>Big/Giant</font>")
  2752.         elseif hasBig then
  2753.             table.insert(result, "<font color='#8bff89'>Big</font>")
  2754.         elseif hasGiant then
  2755.             table.insert(result, "<font color='#8bff89'>Giant</font>")
  2756.         end
  2757.     end
  2758.  
  2759.     -- Combine all parts of the description
  2760.     local descriptionParts = {}
  2761.     if selectedMutationText ~= "" then
  2762.         table.insert(descriptionParts, selectedMutationText)
  2763.     end
  2764.     if #result > 0 then
  2765.         table.insert(descriptionParts, table.concat(result, ", "))
  2766.     end
  2767.  
  2768.     local richDescription = table.concat(descriptionParts, ", ")
  2769.  
  2770.     -- Update the description in the UI
  2771.     genv.AppraiseParagraph:SetDesc(richDescription)
  2772. end
  2773.  
  2774.  
  2775. -- SelectedMutation dropdown
  2776. genv.SelectedMutationToggle = sections.Item1:AddDropdown("SelectedMutation", {
  2777.     Title = "Select Mutation",
  2778.     Description = "If you select multiple, it'll stop at any it gets.",
  2779.     Options = mutationNames,
  2780.     Default = "",
  2781.     PlaceHolder = "Select Mutation",
  2782.     Multiple = true,
  2783.     AllowNull = true,  -- Allow deselection
  2784.     Callback = function(selectedMutation)
  2785.         genv.SelectedMutation = selectedMutation or ""  -- Handle null case
  2786.         updateAppraiseDescription()
  2787.     end,
  2788. })
  2789.  
  2790. -- SelectedMutationPlus dropdown
  2791. genv.SelectedMutationPlusToggle = sections.Item1:AddDropdown("SelectedMutationPlus", {
  2792.     Title = "Select Mutation Plus",
  2793.     Description = "If you select both sparkling and shiny, it'll go until you get both. If you select both big and giant it'll stop at either one.",
  2794.     Options = {"Sparkling", "Shiny", "Big", "Giant"},
  2795.     Default = {},
  2796.     PlaceHolder = "Select Mutation Plus",
  2797.     Multiple = true,
  2798.     AllowNull = true,
  2799.     Callback = function(selectedMutationPlus)
  2800.         genv.SelectedMutationPlus = selectedMutationPlus or {}  -- Handle null case
  2801.         updateAppraiseDescription()
  2802.     end,
  2803. })
  2804.  
  2805.  
  2806. genv.AutoAppraiseToggle = sections.Item1:AddToggle("AutoAppraise", {
  2807.     Title = "Auto Appraise",
  2808.     Default = false,
  2809.     Description = "",
  2810.     Callback = function(isEnabled)
  2811.         genv.AutoAppraise = isEnabled
  2812.         if genv.AutoAppraise then
  2813.             validFish = ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RF/AppraiseAnywhere/HaveValidFish"):InvokeServer()
  2814.             if not validFish then
  2815.                 lib:Notification("Auto Appraise", "Not holding fish or invalid fish.", 5)
  2816.                 genv.AutoAppraiseToggle:Set(false)
  2817.                 return
  2818.             elseif validFish then
  2819.                 print("normal mode..")
  2820.                 local tool = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  2821.                 local currentTool = tostring(tool:WaitForChild("link").Value)
  2822.  
  2823.                 local inventoryConnection
  2824.  
  2825.                 -- Check if the current fish already meets criteria
  2826.                 local inventory = ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[currentTool]
  2827.                 local criteria = {}
  2828.                 local requirementsMet = {}
  2829.                 local meetsRequirements = true
  2830.  
  2831.                 if genv.SelectedMutation and #genv.SelectedMutation > 0 then
  2832.                     -- Add all selected mutations to criteria
  2833.                     for _, selectedMutation in ipairs(genv.SelectedMutation) do
  2834.                         table.insert(criteria, selectedMutation)
  2835.                     end
  2836.                
  2837.                     -- Check if Mutation.Value exists in SelectedMutation
  2838.                     if inventory:FindFirstChild("Mutation") and table.find(genv.SelectedMutation, inventory.Mutation.Value) then
  2839.                         table.insert(requirementsMet, inventory.Mutation.Value)
  2840.                     else
  2841.                         meetsRequirements = false
  2842.                     end
  2843.                 end
  2844.                
  2845.  
  2846.                 for _, mutation in ipairs(genv.SelectedMutationPlus or {}) do
  2847.                     table.insert(criteria, mutation)
  2848.                     if mutation == "Sparkling" and not inventory:FindFirstChild("Sparkling") then
  2849.                         meetsRequirements = false
  2850.                     elseif mutation == "Shiny" and not inventory:FindFirstChild("Shiny") then
  2851.                         meetsRequirements = false
  2852.                     elseif mutation == "Big" or mutation == "Giant" then
  2853.                         local weight = tonumber(inventory:FindFirstChild("Weight").Value)
  2854.                         print(weight)
  2855.                         local baseWeight = tonumber(data.Fish[tool.Name].WeightPool[2] / 10)
  2856.                         print(baseWeight)
  2857.                         if mutation == "Giant" and weight <= baseWeight * 1.99 then
  2858.                             meetsRequirements = false
  2859.                         elseif mutation == "Big" and weight <= baseWeight then
  2860.                             meetsRequirements = false
  2861.                         else
  2862.                             table.insert(requirementsMet, mutation)
  2863.                         end
  2864.                     end
  2865.                 end
  2866.  
  2867.                 print("Criteria: " .. table.concat(criteria, ", "))
  2868.                 print("Requirements met: " .. table.concat(requirementsMet, ", "))
  2869.  
  2870.                 if meetsRequirements then
  2871.                     print("Current fish meets all criteria. No need to appraise.")
  2872.                     genv.AutoAppraiseToggle:Set(false)
  2873.                     return
  2874.                 end
  2875.  
  2876.                 -- If not meeting criteria, appraise the fish
  2877.                 task.spawn(function()
  2878.                     workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Appraiser"):WaitForChild("appraiser"):WaitForChild("appraise"):InvokeServer()
  2879.                 end)
  2880.  
  2881.                 inventoryConnection = LocalPlayer.Backpack.ChildAdded:Connect(function(item)
  2882.                     if not genv.AutoAppraise then
  2883.                         if inventoryConnection then
  2884.                             inventoryConnection:Disconnect()
  2885.                             inventoryConnection = nil
  2886.                         end
  2887.                     end
  2888.  
  2889.                     if tostring(item:WaitForChild("link").Value) ~= currentTool then
  2890.                         game.Players.LocalPlayer.Character.Humanoid:EquipTool(item)
  2891.                         item = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  2892.                         LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  2893.                         task.wait()
  2894.                         game.Players.LocalPlayer.Character.Humanoid:EquipTool(item)
  2895.                         task.wait(1)
  2896.                         currentTool = tostring(game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool"):WaitForChild("link").Value)
  2897.  
  2898.                         -- Repeat criteria checks for the new item
  2899.                         inventory = ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[currentTool]
  2900.                         criteria = {}
  2901.                         requirementsMet = {}
  2902.                         meetsRequirements = true
  2903.  
  2904.                         if genv.SelectedMutation and #genv.SelectedMutation > 0 then
  2905.                             -- Add all selected mutations to criteria
  2906.                             for _, selectedMutation in ipairs(genv.SelectedMutation) do
  2907.                                 table.insert(criteria, selectedMutation)
  2908.                             end
  2909.                        
  2910.                             -- Check if Mutation.Value exists in SelectedMutation
  2911.                             if inventory:FindFirstChild("Mutation") and table.find(genv.SelectedMutation, inventory.Mutation.Value) then
  2912.                                 table.insert(requirementsMet, inventory.Mutation.Value)
  2913.                             else
  2914.                                 meetsRequirements = false
  2915.                             end
  2916.                         end
  2917.                        
  2918.  
  2919.                         for _, mutation in ipairs(genv.SelectedMutationPlus or {}) do
  2920.                             table.insert(criteria, mutation)
  2921.                             if mutation == "Sparkling" and not inventory:FindFirstChild("Sparkling") then
  2922.                                 meetsRequirements = false
  2923.                             elseif mutation == "Shiny" and not inventory:FindFirstChild("Shiny") then
  2924.                                 meetsRequirements = false
  2925.                             elseif mutation == "Big" or mutation == "Giant" then
  2926.                                 local weight = tonumber(inventory:FindFirstChild("Weight").Value)
  2927.                                 local baseWeight = tonumber(data.Fish[item.Name].WeightPool[2])
  2928.                                 if mutation == "Giant" and weight <= baseWeight * 1.99 then
  2929.                                     meetsRequirements = false
  2930.                                 elseif mutation == "Big" and weight <= baseWeight then
  2931.                                     meetsRequirements = false
  2932.                                 else
  2933.                                     table.insert(requirementsMet, mutation)
  2934.                                 end
  2935.                             end
  2936.                         end
  2937.  
  2938.                         print("Criteria: " .. table.concat(criteria, ", "))
  2939.                         print("Requirements met: " .. table.concat(requirementsMet, ", "))
  2940.  
  2941.                         if meetsRequirements then
  2942.                             print("All requirements met! Stopping auto-appraise.")
  2943.                             LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  2944.                             if inventoryConnection then
  2945.                                 genv.AutoAppraiseToggle:Set(false)
  2946.                                 inventoryConnection:Disconnect()
  2947.                                 inventoryConnection = nil
  2948.                                 return
  2949.                             end
  2950.                         else
  2951.                             pcall(function()
  2952.                                 workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Appraiser"):WaitForChild("appraiser"):WaitForChild("appraise"):InvokeServer()
  2953.                             end)
  2954.                             repeat task.wait() until not game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  2955.                         end
  2956.                     end
  2957.                 end)
  2958.             end
  2959.         end
  2960.     end,
  2961. })
  2962. sections.Item1:AddButton({
  2963.     Title = "Appraise Once",
  2964.     Variant = "Outline",
  2965.     Callback = function()
  2966.         validFish = ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RF/AppraiseAnywhere/HaveValidFish"):InvokeServer()
  2967.         if not validFish then
  2968.             lib:Notification("Auto Appraise", "Not holding fish or invalid fish.", 5)
  2969.             genv.AutoAppraiseToggle:Set(false)
  2970.             return
  2971.         else
  2972.             task.spawn(function()
  2973.                 workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Appraiser"):WaitForChild("appraiser"):WaitForChild("appraise"):InvokeServer()
  2974.             end)
  2975.             inventoryConnection2 = LocalPlayer.Backpack.ChildAdded:Connect(function(item)
  2976.                 -- set the item parent to character
  2977.                 if item:IsA("Tool") then
  2978.                     item.Parent = LocalPlayer.Character
  2979.                 end
  2980.             end)
  2981.         end
  2982.     end,
  2983. })
  2984.  
  2985.  
  2986. -- genv.AutoAppraiseToggle = sections.Item1:AddToggle("AutoAppraise", {
  2987. --     Title = "Auto Appraise",
  2988. --     Default = false,
  2989. --     Description = "",
  2990. --     Callback = function(isEnabled)
  2991. --         genv.AutoAppraise = isEnabled
  2992. --         if genv.AutoAppraise then
  2993. --             validFish = ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RF/AppraiseAnywhere/HaveValidFish"):InvokeServer()
  2994. --             if not validFish then
  2995. --                 lib:Notification("Auto Appraise", "Not holding fish or invalid fish.", 5)
  2996. --                 genv.AutoAppraiseToggle:Set(false)
  2997. --                 return
  2998. --             elseif validFish then
  2999. --                 print("normal mode..")
  3000. --                 local tool = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  3001. --                 local currentTool = tostring(tool:WaitForChild("link").Value)
  3002.  
  3003. --                 local inventoryConnection
  3004.  
  3005. --                 task.spawn(function()
  3006. --                     workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Appraiser"):WaitForChild("appraiser"):WaitForChild("appraise"):InvokeServer()
  3007. --                 end)
  3008.                
  3009. --                 inventoryConnection = LocalPlayer.Backpack.ChildAdded:Connect(function(item)
  3010. --                     if not genv.AutoAppraise then
  3011. --                         if inventoryConnection then
  3012. --                             inventoryConnection:Disconnect()
  3013. --                             inventoryConnection = nil
  3014. --                         end
  3015. --                     end
  3016.  
  3017. --                     if tostring(item:WaitForChild("link").Value) ~= currentTool then
  3018. --                         game.Players.LocalPlayer.Character.Humanoid:EquipTool(item)
  3019. --                         item = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  3020. --                         LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3021. --                         task.wait()
  3022. --                         game.Players.LocalPlayer.Character.Humanoid:EquipTool(item)
  3023. --                         currentTool = tostring(item:WaitForChild("link").Value)
  3024.  
  3025. --                         local inventory = ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[currentTool]
  3026.                        
  3027. --                         -- Build criteria string
  3028. --                         local criteria = {}
  3029. --                         if genv.SelectedMutation and genv.SelectedMutation ~= "" then
  3030. --                             table.insert(criteria, genv.SelectedMutation)
  3031. --                         end
  3032. --                         for _, mutation in ipairs(genv.SelectedMutationPlus or {}) do
  3033. --                             table.insert(criteria, mutation)
  3034. --                         end
  3035. --                         print("Criteria: " .. table.concat(criteria, ", "))
  3036.                        
  3037. --                         -- Track requirements met
  3038. --                         local requirementsMet = {}
  3039. --                         local meetsRequirements = true
  3040.                        
  3041. --                         -- Check regular mutation first
  3042. --                         if genv.SelectedMutation and genv.SelectedMutation ~= "" then
  3043. --                             if inventory:FindFirstChild("Mutation") and
  3044. --                                inventory:FindFirstChild("Mutation").Value == genv.SelectedMutation then
  3045. --                                 table.insert(requirementsMet, genv.SelectedMutation)
  3046. --                             else
  3047. --                                 meetsRequirements = false
  3048. --                             end
  3049. --                         end
  3050.                        
  3051. --                         -- Check mutation plus requirements if any are selected and mutation requirement was met
  3052. --                         if meetsRequirements and #genv.SelectedMutationPlus > 0 then
  3053. --                             -- Check Sparkling
  3054. --                             if table.find(genv.SelectedMutationPlus, "Sparkling") then
  3055. --                                 if inventory:FindFirstChild("Sparkling") then
  3056. --                                     table.insert(requirementsMet, "Sparkling")
  3057. --                                 else
  3058. --                                     meetsRequirements = false
  3059. --                                 end
  3060. --                             end
  3061.                            
  3062. --                             -- Check Shiny
  3063. --                             if table.find(genv.SelectedMutationPlus, "Shiny") then
  3064. --                                 if inventory:FindFirstChild("Shiny") then
  3065. --                                     table.insert(requirementsMet, "Shiny")
  3066. --                                 else
  3067. --                                     meetsRequirements = false
  3068. --                                 end
  3069. --                             end
  3070.                            
  3071. --                             -- Check Big/Giant
  3072. --                             local requiresBig = table.find(genv.SelectedMutationPlus, "Big") ~= nil
  3073. --                             local requiresGiant = table.find(genv.SelectedMutationPlus, "Giant") ~= nil
  3074.                            
  3075. --                             if requiresBig or requiresGiant then
  3076. --                                 local weight = tonumber(inventory:FindFirstChild("Weight").Value)
  3077. --                                 local baseWeight = tonumber(data.Fish[item.Name].WeightPool[2])
  3078.                                
  3079. --                                 if requiresGiant and weight > baseWeight * 1.99 then
  3080. --                                     table.insert(requirementsMet, "Giant")
  3081. --                                 elseif requiresBig and weight > baseWeight then
  3082. --                                     table.insert(requirementsMet, "Big")
  3083. --                                 else
  3084. --                                     meetsRequirements = false
  3085. --                                 end
  3086. --                             end
  3087. --                         end
  3088.                        
  3089. --                         -- Print current fish info
  3090. --                         if inventory:FindFirstChild("Mutation") then
  3091. --                             print("Current fish mutation: " .. inventory.Mutation.Value)
  3092. --                         end
  3093. --                         print("Requirements met: " .. table.concat(requirementsMet, ", "))
  3094.                        
  3095. --                         -- If all requirements are met, stop auto-appraising
  3096. --                         if meetsRequirements then
  3097. --                             print("All requirements met! Stopping auto-appraise.")
  3098. --                             LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3099. --                             if inventoryConnection then
  3100. --                                 genv.AutoAppraiseToggle:Set(false)
  3101. --                                 inventoryConnection:Disconnect()
  3102. --                                 inventoryConnection = nil
  3103. --                                 return
  3104. --                             end
  3105. --                         else
  3106. --                             -- Continue appraising if requirements aren't met
  3107. --                             pcall(function()
  3108. --                                 workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Appraiser"):WaitForChild("appraiser"):WaitForChild("appraise"):InvokeServer()
  3109. --                             end)
  3110. --                             repeat task.wait() until not game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  3111. --                         end
  3112. --                     end
  3113. --                 end)
  3114. --             end
  3115. --         end
  3116. --     end,
  3117. -- })
  3118.  
  3119. -- genv.AutoAppraiseToggle = sections.Item1:AddToggle("AutoAppraise", {
  3120. --     Title = "Auto Appraise",
  3121. --     Default = false,
  3122. --     Description = "",
  3123. --     Callback = function(isEnabled)
  3124. --         genv.AutoAppraise = isEnabled
  3125. --         if genv.AutoAppraise then
  3126. --             validFish = ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RF/AppraiseAnywhere/HaveValidFish"):InvokeServer()
  3127. --             if not validFish then
  3128. --                 lib:Notification("Auto Appraise","Not holding fish or invalid fish.", 5)
  3129. --                 genv.AutoAppraiseToggle:Set(false)
  3130. --                 return
  3131. --             elseif validFish then
  3132. --                 print("normal mode..")
  3133. --                 local tool = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  3134. --                 local currentTool = tostring(tool:WaitForChild("link").Value)
  3135.  
  3136.  
  3137. --                 local inventoryConnection
  3138.  
  3139. --                 task.spawn(function()
  3140. --                     workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Appraiser"):WaitForChild("appraiser"):WaitForChild("appraise"):InvokeServer()
  3141. --                 end)
  3142. --                 inventoryConnection = LocalPlayer.Backpack.ChildAdded:Connect(function(item)
  3143.  
  3144. --                     if not genv.AutoAppraise then
  3145. --                         if inventoryConnection then
  3146. --                             inventoryConnection:Disconnect()
  3147. --                             inventoryConnection = nil
  3148. --                         end
  3149. --                     end
  3150.  
  3151. --                     if tostring(item:WaitForChild("link").Value) ~= currentTool then
  3152.  
  3153. --                         game.Players.LocalPlayer.Character.Humanoid:EquipTool(item)
  3154. --                         item = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  3155. --                         LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3156. --                         task.wait()
  3157. --                         game.Players.LocalPlayer.Character.Humanoid:EquipTool(item)
  3158. --                         currentTool = tostring(item:WaitForChild("link").Value)
  3159.  
  3160. --                         if ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[currentTool]:FindFirstChild("Mutation") then
  3161. --                             -- print(ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[currentTool]:FindFirstChild("Mutation").Value)
  3162. --                             -- print(genv.SelectedMutation)
  3163. --                             if #genv.SelectedMutationPlus > 0 then
  3164. --                                 -- if in there is sparkling then
  3165. --                                 if ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[currentTool]:FindFirstChild("Sparkling") ~= nil then
  3166. --                                     -- print("sparkling is in there")
  3167. --                                 end
  3168. --                                 -- if in there is shiny then
  3169. --                                 if ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[currentTool]:FindFirstChild("Shiny") ~= nil then
  3170. --                                     -- print("shiny is in there")
  3171. --                                 end
  3172. --                                 -- if in there is big then
  3173. --                                 if tonumber(ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[currentTool]:FindFirstChild("Weight").Value) > tonumber(data.Fish[item.Name].WeightPool[2]) then
  3174. --                                     -- print("big")
  3175. --                                 end
  3176. --                                 if tonumber(ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[currentTool]:FindFirstChild("Weight").Value) > tonumber(data.Fish[item.Name].WeightPool[2] * 1.99) then
  3177. --                                     -- print("giant")
  3178. --                                 end
  3179. --                                 -- and if it's big/giant then just use the big's threshold..
  3180.  
  3181. --                                 -- anyways, after that, move onto the next part below where it does the mutation check.
  3182.  
  3183.  
  3184. --                             if ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[currentTool]:FindFirstChild("Mutation").Value == genv.SelectedMutation then
  3185. --                                 LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3186. --                                 if inventoryConnection then
  3187. --                                     genv.AutoAppraiseToggle:Set(false)
  3188. --                                     inventoryConnection:Disconnect()
  3189. --                                     inventoryConnection = nil
  3190. --                                     return
  3191. --                                 end
  3192. --                             end
  3193. --                         end
  3194. --                         pcall(function()
  3195. --                             workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Appraiser"):WaitForChild("appraiser"):WaitForChild("appraise"):InvokeServer()
  3196. --                         end)
  3197. --                         repeat task.wait() until not game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  3198. --                     end
  3199. --                 end
  3200. --                 end)
  3201. --             end
  3202. --         end
  3203. --     end,
  3204. -- })
  3205.  
  3206. genv.EnchantParagraph = sections.Item2:AddParagraph({Title = "", Description = "Info"})
  3207.  
  3208.  
  3209. -- Populate the enchant names for the dropdown
  3210. local enchantNames = {}
  3211. if type(data.Enchants) == "table" then
  3212.     for enchantName, enchantData in pairs(data.Enchants) do
  3213.         -- Add enchant name to list
  3214.         table.insert(enchantNames, enchantName)
  3215.     end
  3216. end
  3217.  
  3218. -- Add the enchant dropdown
  3219. sections.Item2:AddDropdown("EnchantSelectDropDown", {
  3220.     Title = "Selected Enchant",
  3221.     Description = "",
  3222.     Options = enchantNames,  -- Populate with enchant names
  3223.     Default = "",
  3224.     PlaceHolder = "Select Enchant",
  3225.     Multiple = false,
  3226.     Callback = function(selectedEnchant)
  3227.         -- Store the selected enchant name
  3228.         genv.SelectedEnchant = selectedEnchant
  3229.        
  3230.         -- Fetch the description and color of the selected enchant
  3231.         local enchantDescription = data.Enchants[selectedEnchant] and data.Enchants[selectedEnchant].Description or "No description available"
  3232.         local enchantColor = data.Enchants[selectedEnchant] and data.Enchants[selectedEnchant].Color or "1,1,1"  -- Default to white if no color
  3233.        
  3234.         -- Convert the color and description to rich text format
  3235.         local coloredText = rgbToRichText(enchantColor, selectedEnchant)
  3236.         local richDescription = coloredText .. "\n" .. enchantDescription
  3237.        
  3238.         -- Update the description
  3239.         genv.EnchantParagraph:SetDesc(richDescription)
  3240.     end,
  3241. })
  3242.  
  3243. genv.AutoEnchantToggle = sections.Item2:AddToggle("AutoEnchantToggle", {
  3244.     Title = "Auto Enchant",
  3245.     Default = false,
  3246.     Description = "",
  3247.     Callback = function(isEnabled)
  3248.         genv.AutoEnchant = isEnabled
  3249.        
  3250.         if genv.AutoEnchant then
  3251.             if data.Enchants[genv.SelectedEnchant].IsExalted then
  3252.                 if not workspace[LocalPlayer.Name]:FindFirstChild("Exalted Relic") then
  3253.                     lib:Notification("Auto Enchant","Please hold an Exalted Relic.", 5)
  3254.                     genv.AutoEnchantToggle:Set(false)
  3255.                     return
  3256.                 end
  3257.             elseif not data.Enchants[genv.SelectedEnchant].IsExalted then
  3258.                 if not workspace[LocalPlayer.Name]:FindFirstChild("Enchant Relic") then
  3259.                     lib:Notification("Auto Enchant","Please hold an Enchant Relic.", 5)
  3260.                     genv.AutoEnchantToggle:Set(false)
  3261.                     return
  3262.                 end
  3263.             end
  3264.             if ReplicatedStorage.world.cycle.Value ~= "Night" then
  3265.                 lib:Notification("Auto Enchant","It needs to be night time.", 5)
  3266.                 genv.AutoEnchantToggle:Set(false)
  3267.                 return
  3268.             end
  3269.             if ReplicatedStorage.playerstats[LocalPlayer.Name].Rods[getEquippedRod()].Value == genv.SelectedEnchant then
  3270.                 lib:Notification("Auto Enchant","You already have this enchant.", 5)
  3271.                 genv.AutoEnchantToggle:Set(false)
  3272.                 return
  3273.             end
  3274.             LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(1310, -799, -82)
  3275.         end
  3276.         task.wait(1)
  3277.         while genv.AutoEnchant do
  3278.             task.wait(0.1)
  3279.             if workspace.world.interactables:FindFirstChild("Enchant Altar"):FindFirstChild("ProximityPrompt").Enabled and genv.AutoEnchant then
  3280.                 if data.Enchants[genv.SelectedEnchant].IsExalted then
  3281.                     if not workspace[LocalPlayer.Name]:FindFirstChild("Exalted Relic") then
  3282.                         lib:Notification("Auto Enchant","Please hold an Exalted Relic.", 5)
  3283.                         genv.AutoEnchantToggle:Set(false)
  3284.                         return
  3285.                     end
  3286.                 elseif not data.Enchants[genv.SelectedEnchant].IsExalted then
  3287.                     if not workspace[LocalPlayer.Name]:FindFirstChild("Enchant Relic") then
  3288.                         lib:Notification("Auto Enchant","Please hold an Enchant Relic.", 5)
  3289.                         genv.AutoEnchantToggle:Set(false)
  3290.                         return
  3291.                     end
  3292.                 end
  3293.  
  3294.                 -- fireproximityprompt(workspace.world.interactables["Enchant Altar"].ProximityPrompt, 0)
  3295.                 workspace.world.interactables:FindFirstChild("Enchant Altar"):FindFirstChild("ProximityPrompt").Parent = LocalPlayer.Character
  3296.                 local player = services.Players.LocalPlayer
  3297.                 local char = player.Character
  3298.  
  3299.                 for _, obj in ipairs(char:GetChildren()) do
  3300.                     if obj:IsA("ProximityPrompt") then
  3301.                         obj.HoldDuration = 0
  3302.                         obj:InputHoldBegin()
  3303.                         task.wait(0.01)
  3304.                         obj:InputHoldEnd()
  3305.                         obj.Parent = workspace.world.interactables:FindFirstChild("Enchant Altar")
  3306.                     end
  3307.                 end              
  3308.                 task.wait(0.5)
  3309.                 if LocalPlayer.PlayerGui.over:FindFirstChild("prompt") then
  3310.                     local confirmButton = LocalPlayer.PlayerGui.over.prompt.confirm
  3311.                     if getconnections then
  3312.                         for i, v in pairs(getconnections(confirmButton.MouseButton1Click)) do
  3313.                             v.Function()
  3314.                         end
  3315.                     else
  3316.                         firesignal(confirmButton.MouseButton1Click)
  3317.                     end
  3318.                 end                
  3319.             end
  3320.             if ReplicatedStorage.playerstats[LocalPlayer.Name].Rods[getEquippedRod()].Value == genv.SelectedEnchant then
  3321.                 genv.AutoEnchantToggle:Set(false)
  3322.             end
  3323.         end
  3324.     end,
  3325. })
  3326.  
  3327. -- sections.Item3:AddParagraph({Title = '<font color="#ea00ff">T</font><font color="#cc00ff">o</font><font color="#af00ff">t</font><font color="#9100ff">e</font><font color="#7400ff">m</font><font color="#5700ff">s</font>', Description = ""})
  3328.  
  3329. -- Create a list for totems
  3330. local totemItems = {}
  3331. if type(data.Items) == "table" then
  3332.     for itemName, itemData in pairs(data.Items) do
  3333.         if itemName:find("Totem") then
  3334.             -- Add items containing "Totem" to the totem list
  3335.             table.insert(totemItems, itemName)
  3336.         end
  3337.     end
  3338. end
  3339.  
  3340. -- Add the totems to the dropdown
  3341. sections.Item3:AddDropdown("DayTotem", {
  3342.     Title = "Totem - Day",
  3343.     Description = "",
  3344.     PlaceHolder = "Select Totem - Day",
  3345.     Options = totemItems,  -- Populate the dropdown with filtered totems
  3346.     Default = "",
  3347.     Multiple = false,
  3348.     Callback = function(SelectedTotem)
  3349.         -- print("Selected Totem:", SelectedTotem)
  3350.         genv.SelectedDayTotem = SelectedTotem
  3351.     end,
  3352. })
  3353.  
  3354.  
  3355. sections.Item3:AddDropdown("NightTotem", {
  3356.     Title = "Totem - Night",
  3357.     Description = "",
  3358.     Options = totemItems,
  3359.     Default = "",
  3360.     PlaceHolder = "Select Totem - Night",
  3361.     Multiple = false,
  3362.     Callback = function(SelectedTotem)
  3363.         -- print("Selected Totem:", SelectedTotem)
  3364.         genv.SelectedNightTotem = SelectedTotem
  3365.        
  3366.     end
  3367. })
  3368.  
  3369. genv.LastCycle = nil
  3370. genv.AutoPurchaseIfNone = false
  3371. genv.TotemInUse = false
  3372. sections.Item3:AddToggle("AutoTotemToggle", {
  3373.     Title = "Auto Totem",
  3374.     Default = false,
  3375.     Description = "",
  3376.     Callback = function(isEnabled)
  3377.         genv.AutoTotemToggle = isEnabled
  3378.         if genv.AutoTotemToggle then
  3379.             if variables.AutoCast then
  3380.                 lib:Notification("Auto Totem", "Auto Totem has compatibility issues with auto fishing and will be very glitchy.", 5)
  3381.             end
  3382.         end
  3383.         while genv.AutoTotemToggle do
  3384.             task.wait(1)
  3385.            
  3386.             local currentCycle = ReplicatedStorage.world.cycle.Value
  3387.  
  3388.             if currentCycle ~= genv.LastCycle then
  3389.                 if currentCycle == "Day" then
  3390.                     if not LocalPlayer.Backpack:FindFirstChild(genv.SelectedDayTotem) and genv.AutoPurchaseIfNone == true then
  3391.                         game:GetService('ReplicatedStorage').events.purchase:FireServer(genv.SelectedDayTotem, "Item", nil, 1)
  3392.                         task.wait(1)
  3393.                     end
  3394.  
  3395.                     if LocalPlayer.Backpack:FindFirstChild(genv.SelectedDayTotem) then
  3396.                         genv.TotemInUse = true
  3397.                         LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3398.                         LocalPlayer.Backpack:FindFirstChild(genv.SelectedDayTotem).Parent = LocalPlayer.Character
  3399.                     end
  3400.  
  3401.                     if workspace[LocalPlayer.Name]:FindFirstChild(genv.SelectedDayTotem) then
  3402.                         workspace[LocalPlayer.Name][genv.SelectedDayTotem]:Activate()
  3403.                     end
  3404.                     LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3405.                     genv.TotemInUse = false
  3406.                 elseif currentCycle == "Night" then
  3407.                     if not LocalPlayer.Backpack:FindFirstChild(genv.SelectedNightTotem) and genv.AutoPurchaseIfNone == true then
  3408.                         game:GetService('ReplicatedStorage').events.purchase:FireServer(genv.SelectedDayTotem, "Item", nil, 1)
  3409.                         task.wait(1)
  3410.                     end
  3411.  
  3412.                     if LocalPlayer.Backpack:FindFirstChild(genv.SelectedNightTotem) then
  3413.                         genv.TotemInUse = true
  3414.                         LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3415.                         LocalPlayer.Backpack:FindFirstChild(genv.SelectedNightTotem).Parent = LocalPlayer.Character
  3416.                     end
  3417.  
  3418.                     if workspace[LocalPlayer.Name]:FindFirstChild(genv.SelectedNightTotem) then
  3419.                         workspace[LocalPlayer.Name][genv.SelectedNightTotem]:Activate()
  3420.                     end
  3421.                     LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3422.                     genv.TotemInUse = false
  3423.                 end
  3424.  
  3425.                 genv.LastCycle = currentCycle
  3426.                 genv.TotemInUse = false
  3427.             end
  3428.         end
  3429.     end,
  3430. })
  3431.  
  3432. sections.Item3:AddToggle("AutoTotemToggle", {
  3433.     Title = "Auto Purchase Totem",
  3434.     Default = false,
  3435.     Description = " Auto Purcahse(s) Totem if you got none",
  3436.     Callback = function(isEnabled)
  3437.         genv.AutoPurchaseIfNone = isEnabled
  3438.     end,
  3439. })
  3440.  
  3441. sections.Item3:AddParagraph({
  3442.     Title = gradient("Sundial"),
  3443.     Description = "Uses Sundial Totem until the event."
  3444. })
  3445.  
  3446.  
  3447. local eventList = {"Megalodon", "Night of the Fireflies", "Night of the Luminous", "Shiny Surge", "Mutation Surge"}
  3448. sections.Item3:AddDropdown("EventTotem", {
  3449.     Title = "Select Event",
  3450.     Description = "",
  3451.     Options = eventList,
  3452.     Default = "",
  3453.     PlaceHolder = "Select Event",
  3454.     Multiple = false,
  3455.     Callback = function(SelectedEvent)
  3456.         genv.SelectedEvent = SelectedEvent
  3457.     end
  3458. })
  3459.  
  3460.  
  3461. sections.Item3:AddToggle("AutoTotemToggle", {
  3462.     Title = "Auto Sundial",
  3463.     Default = false,
  3464.     Description = "",
  3465.     Callback = function(isEnabled)
  3466.         genv.AutoSundial = isEnabled
  3467.         if genv.AutoSundial then
  3468.             if variables.AutoCast then
  3469.                 lib:Notification("Auto Sundial", "Auto Sundial has compatibility issues with auto fishing and will be very glitchy.", 5)
  3470.             end
  3471.         end
  3472.         while genv.AutoSundial do
  3473.             local currentCycle = ReplicatedStorage.world.cycle.Value
  3474.  
  3475.             if currentCycle ~= genv.LastCycle then
  3476.                 -- Special case for "Megalodon"
  3477.                 if genv.SelectedEvent == "Megalodon" then
  3478.                     local foundMegalodon = false
  3479.  
  3480.                     for _, child in pairs(workspace.zones.fishing:GetChildren()) do
  3481.                         if child:FindFirstChild("beacon") then
  3482.                             local poiHeader = child:FindFirstChild("POIHeader")
  3483.                             if poiHeader and poiHeader:FindFirstChild("title") and poiHeader.title:IsA("TextLabel") then
  3484.                                 print("Event title:", poiHeader.title.Text)
  3485.                                 if poiHeader.title.Text:find("Megalodon") then
  3486.                                     print("Megalodon detected in POIHeader, waiting for it to end.")
  3487.                                     foundMegalodon = true
  3488.                    
  3489.                                     -- Wait until "Megalodon" is no longer present
  3490.                                     while genv.AutoSundial do
  3491.                                         local currentText = poiHeader.title.Text
  3492.                                         if not currentText:find("Megalodon") then
  3493.                                             print("Megalodon event ended.")
  3494.                                             break
  3495.                                         end
  3496.                                         task.wait(1)
  3497.                                     end
  3498.                    
  3499.                                     -- Exit loop since "Megalodon" was found
  3500.                                     break
  3501.                                 end
  3502.                             end
  3503.                         end
  3504.                    
  3505.                         local abundance = child:FindFirstChild("Abundance")
  3506.                         if abundance and abundance:FindFirstChild("Chance") and abundance:FindFirstChild("Mutation") then
  3507.                             print("Fishing zone:", child.Name)
  3508.                             if child.Name:find("Megalodon") then
  3509.                                 print("Megalodon detected in fishing zone name, waiting for it to end.")
  3510.                                 foundMegalodon = true
  3511.                    
  3512.                                 -- Wait until "Megalodon" is no longer in the name
  3513.                                 while genv.AutoSundial do
  3514.                                     if not child.Name:find("Megalodon") then
  3515.                                         print("Megalodon event ended in fishing zone name.")
  3516.                                         break
  3517.                                     end
  3518.                                     task.wait(1)
  3519.                                 end
  3520.                    
  3521.                                 -- Exit loop since "Megalodon" was found
  3522.                                 break
  3523.                             end
  3524.                         end
  3525.                     end
  3526.                    
  3527.                     -- If Megalodon was not found, execute fallback behavior
  3528.                     if not foundMegalodon then
  3529.                         if variables.AutoCast then
  3530.                             _G.setToFalse = true
  3531.                             variables.Caster:Set(false)
  3532.                         end
  3533.                         LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3534.                         LocalPlayer.Character.Humanoid:EquipTool(LocalPlayer.Backpack["Sundial Totem"])
  3535.                         LocalPlayer.Character["Sundial Totem"]:Activate()
  3536.                         LocalPlayer.Character["Sundial Totem"].Parent = LocalPlayer.Backpack
  3537.                         task.wait(1)
  3538.                         if _G.setToFalse then
  3539.                             variables.Caster:Set(true)
  3540.                             _G.setToFalse = false
  3541.                         end
  3542.                     end
  3543.                    
  3544.                 else
  3545.                     -- Default behavior
  3546.                     if ReplicatedStorage.world.event.Value == genv.SelectedEvent then
  3547.                         print("Event matched: ", genv.SelectedEvent)
  3548.                     else
  3549.                         print(ReplicatedStorage.world.event.Value)
  3550.                         -- if variables.AutoCast then
  3551.                         --     _G.setToFalse = true
  3552.                         --     variables.Caster:Set(false)
  3553.                         --     task.wait(3)
  3554.                         -- end
  3555.                         -- variables.Caster:Set(false)
  3556.                         genv.UsingTotem = true
  3557.                         LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3558.                         LocalPlayer.Character.Humanoid:EquipTool(LocalPlayer.Backpack["Sundial Totem"])
  3559.                         LocalPlayer.Character["Sundial Totem"]:Activate()
  3560.                         LocalPlayer.Character["Sundial Totem"].Parent = LocalPlayer.Backpack
  3561.                         -- LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3562.                         -- task.wait(3)
  3563.                         genv.UsingTotem = false
  3564.                         -- variables.Caster:Set(true)
  3565.                         -- task.wait(3)
  3566.                         -- if _G.setToFalse then
  3567.                         --     variables.Caster:Set(true)
  3568.                         --     _G.setToFalse = false
  3569.                         -- end
  3570.                     end
  3571.                 end
  3572.  
  3573.                 -- Update the LastCycle tracker
  3574.                 genv.LastCycle = currentCycle
  3575.             end
  3576.  
  3577.             task.wait(1)
  3578.         end
  3579.     end,
  3580. })
  3581.  
  3582.  
  3583. sections.Item3:AddToggle("AutoMeteorToggle", {
  3584.     Title = "Auto Meteor",
  3585.     Default = false,
  3586.     Description = "Automatically collects item from meteor.",
  3587.     Callback = function(isEnabled)
  3588.         genv.AutoMeteor = isEnabled
  3589.         if genv.AutoMeteor then
  3590.             AutoMeteorConnection = workspace:WaitForChild("MeteorItems").ChildAdded:Connect(function(child)
  3591.                 local oldPosition = LocalPlayer.Character.HumanoidRootPart.CFrame
  3592.                 LocalPlayer.Character.HumanoidRootPart.CFrame = workspace.MeteorItems[child.Name].WorldPivot
  3593.            
  3594.                 local meteorPrompt = nil
  3595.            
  3596.                 for _, child in ipairs(workspace:WaitForChild("MeteorItems"):GetDescendants()) do
  3597.                     if child:IsA("ProximityPrompt") then
  3598.                         meteorPrompt = child
  3599.                         print("here")
  3600.                         break
  3601.                     end
  3602.                 end
  3603.                 task.wait(3)
  3604.                 print('here2')
  3605.                 if meteorPrompt then
  3606.                     print('here3')
  3607.                     fireproximityprompt(meteorPrompt)
  3608.                     task.wait(1)
  3609.                     LocalPlayer.Character.HumanoidRootPart.CFrame = oldPosition
  3610.                 end
  3611.             end)
  3612.         else
  3613.             if AutoMeteorConnection ~= nil then
  3614.                 AutoMeteorConnection:Disconnect()
  3615.                 AutoMeteorConnection = nil
  3616.             end
  3617.         end
  3618.     end,
  3619. })
  3620.  
  3621. sections.Item3:AddToggle("AutoMeteorToggle", {
  3622.     Title = "Auto Purchase Sundial",
  3623.     Default = false,
  3624.     Description = "Automatically purchases more Sundial Totem(s) if you don't have any.",
  3625.     Callback = function(isEnabled)
  3626.         genv.AutoPurchaseSundial = isEnabled
  3627.         while genv.AutoPurchaseSundial do
  3628.             local heldTool = LocalPlayer.Character:FindFirstChildOfClass("Tool")
  3629.             if heldTool ~= "Sundial Totem" then
  3630.                 --not holding.
  3631.                 if not LocalPlayer.Backpack["Sundial Totem"] then
  3632.                     -- not in backpack either, gotta purchase..
  3633.                     game:GetService('ReplicatedStorage').events.purchase:FireServer("Sundial Totem", "Item", nil, 1)
  3634.                 else
  3635.                     -- LocalPlayer.Character.Humanoid:EquipTool(LocalPlayer.Backpack["Sundial Totem"])
  3636.                 end
  3637.             else
  3638.                 -- still got sundial, and in hand.
  3639.             end
  3640.             task.wait(1)
  3641.         end
  3642.     end,
  3643. })
  3644.  
  3645.  
  3646. -- sections.Item4:AddParagraph({Title = '<font color="#ea00ff">T</font><font color="#d700ff">r</font><font color="#c500ff">e</font><font color="#b200ff">a</font><font color="#a000ff">s</font><font color="#8e00ff">u</font><font color="#7b00ff">r</font><font color="#6900ff">e</font><font color="#5700ff">s</font>', Description = ""})
  3647. -- sections.Item4:AddParagraph({Title = gradient("Dupe Info"), Description = "<b>The items selected below will be duped.</b>\nFor example: If you have 20 treasure maps and use 3 and got the selected item, the remaining 17 maps will be used and you'll be left with 17 of that item."})
  3648.  
  3649. -- local treasureNames = {}
  3650. -- if type(data.Treasure) == "table" then
  3651. --     for treasureName, treasureData in pairs(data.Treasure) do
  3652. --         table.insert(treasureNames, treasureName)
  3653. --     end
  3654. -- end
  3655.  
  3656. -- sections.Item4:AddDropdown("TreasureItems", {
  3657. --     Title = "Select Item(s)",
  3658. --     Description = "",
  3659. --     PlaceHolder = "Select Item - Treasure",
  3660. --     Options = treasureNames,
  3661. --     Default = "",
  3662. --     Multiple = true,
  3663. --     Callback = function(SelectedTreasureItems)
  3664. --         genv.SelectedTreasureItems = SelectedTreasureItems
  3665.  
  3666. --         for _, item in ipairs(genv.SelectedTreasureItems) do
  3667. --             print(item)
  3668. --         end
  3669. --     end,
  3670. -- })
  3671.  
  3672. local function interactWithChest(chest)
  3673.     if chest and chest:FindFirstChild("ProximityPrompt") then
  3674.         local prompt = chest.ProximityPrompt
  3675.         prompt.HoldDuration = 0
  3676.         prompt.MaxActivationDistance = math.huge
  3677.        
  3678.         local player = services.Players.LocalPlayer
  3679.         local char = player.Character
  3680.        
  3681.         -- Temporarily parent the ProximityPrompt to the character
  3682.         prompt.Parent = char
  3683.         task.wait()
  3684.         for _, obj in ipairs(char:GetChildren()) do
  3685.             if obj:IsA("ProximityPrompt") then
  3686.                 obj:InputHoldBegin()
  3687.                 task.wait(0.01)
  3688.                 obj:InputHoldEnd()
  3689.                 obj:Destroy() -- Remove the prompt
  3690.                 chest:Destroy() -- Destroy the chest after interaction
  3691.             end
  3692.         end
  3693.     else
  3694.         warn("Chest or ProximityPrompt not found!")
  3695.     end
  3696. end
  3697.  
  3698.  
  3699.  
  3700. local function fixAllMaps()
  3701.     LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3702.     for i, v in pairs(game.Players.LocalPlayer.Backpack:GetChildren()) do
  3703.         if v.Name == "Treasure Map" then
  3704.             game.Players.LocalPlayer.Character.Humanoid:EquipTool(v)
  3705.             print("equipped, remote..")
  3706.             workspace.world.npcs["Jack Marrow"].treasure.repairmap:InvokeServer()
  3707.             print("remote success")
  3708.         end
  3709.     end
  3710. end
  3711.  
  3712. local function collectAllChests()
  3713.     for i, v in pairs(workspace.world.chests:GetDescendants()) do
  3714.         if v:IsA("Part") and v:FindFirstChild("ChestSetup") then
  3715.             for _, v in pairs(workspace.world.chests:GetDescendants()) do
  3716.                 if v.Name == "ProximityPrompt" then
  3717.                     if fireproximityprompt then
  3718.                         fireproximityprompt(v)
  3719.                     else
  3720.                         interactWithChest(v)
  3721.                     end
  3722.                 end
  3723.             end
  3724.         end
  3725.     end
  3726. end
  3727.  
  3728.  
  3729. sections.Item4:AddToggle("RepairMapCollectTreasureToggle", {
  3730.     Title = "Auto Repair & Collect Treasure(s)",
  3731.     Default = false,
  3732.     Description = "",
  3733.     Callback = function(isEnabled)
  3734.         variables.MapToggle = isEnabled
  3735.         while variables.MapToggle do
  3736.             if genv.TreasureDupeAllowed then
  3737.                 -- Dupe Mode
  3738.                 print("wait mode")
  3739.                 local mapCount = 0
  3740.  
  3741.                 for i, v in pairs(game.Players.LocalPlayer.Backpack:GetChildren()) do
  3742.                     if v.Name == "Treasure Map" then
  3743.                         mapCount = mapCount + 1
  3744.                     end
  3745.                 end
  3746.                 print(mapCount)
  3747.                 print(genv.MinMapAmount)
  3748.                 if mapCount >= genv.MinMapAmount then
  3749.                     print('above')
  3750.                     print(mapCount)
  3751.                     print(genv.MinMapAmount)
  3752.                     fixAllMaps()
  3753.  
  3754.                    
  3755.                     local announcements = LocalPlayer.PlayerGui.hud.safezone.announcements
  3756.  
  3757.                     DUPEMODECONNECTION = announcements.ChildAdded:Connect(function(child)
  3758.                         if child.Name == "Template" then
  3759.                             local main = child:FindFirstChild("Main")
  3760.                             if main and main:IsA("TextLabel") then
  3761.                                 for _, item in ipairs(genv.SelectedTreasureItems or {}) do
  3762.                                     if main.Text:find(item) then
  3763.                                         if item:find("Sunken") then
  3764.                                             -- Check if "Rod" is also present in the text
  3765.                                             if not main.Text:find("Rod") then
  3766.                                                 print("Found Sunken but not Rod:", item)
  3767.                                                 genv.treasureDupeMode = true
  3768.                                                 collectAllChests()
  3769.                                                 DUPEMODECONNECTION:Disconnect()
  3770.                                                 genv.treasureDupeMode = false
  3771.                                                 break
  3772.                                             else
  3773.                                                 print("Ignored because it contains Rod:", item)
  3774.                                             end
  3775.                                         else
  3776.                                             print("found:", item)
  3777.                                             genv.treasureDupeMode = true
  3778.                                             collectAllChests()
  3779.                                             DUPEMODECONNECTION:Disconnect()
  3780.                                             genv.treasureDupeMode = false
  3781.                                             break
  3782.                                         end
  3783.                                     end
  3784.                                 end
  3785.                             end
  3786.                         end
  3787.                     end)
  3788.                    
  3789.  
  3790.                     -- Collect Treasure
  3791.                     for i, v in pairs(workspace.world.chests:GetDescendants()) do
  3792.                         if v:IsA("Part") and v:FindFirstChild("ChestSetup") then
  3793.                             for _, v in pairs(workspace.world.chests:GetDescendants()) do
  3794.                                 if v.Name == "ProximityPrompt" then
  3795.                                     if not variables.MapToggle or genv.treasureDupeMode then
  3796.                                         break
  3797.                                     end
  3798.                                    
  3799.                                     if fireproximityprompt then
  3800.                                         fireproximityprompt(v)
  3801.                                     else
  3802.                                         interactWithChest(v.Parent.Name)
  3803.                                     end
  3804.                                     task.wait(1)
  3805.                                 end
  3806.                             end
  3807.                         end
  3808.                     end
  3809.                 end
  3810.             else
  3811.                 -- Normal, Auto Mode
  3812.                 print("do.")
  3813.                 LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3814.                 for i, v in pairs(game.Players.LocalPlayer.Backpack:GetChildren()) do
  3815.                     if v.Name == "Treasure Map" then
  3816.                         game.Players.LocalPlayer.Character.Humanoid:EquipTool(v)
  3817.                         print("equipped, remote..")
  3818.                         workspace.world.npcs["Jack Marrow"].treasure.repairmap:InvokeServer()
  3819.                         print("remote success")
  3820.                     end
  3821.                 end
  3822.  
  3823.                 -- Collect Treasure
  3824.                 for i, v in pairs(workspace.world.chests:GetDescendants()) do
  3825.                     if v:IsA("Part") and v:FindFirstChild("ChestSetup") then
  3826.                         for _, v in pairs(workspace.world.chests:GetDescendants()) do
  3827.                             if v.Name == "ProximityPrompt" then
  3828.                                 if not variables.MapToggle then
  3829.                                     break
  3830.                                 end      
  3831.                                
  3832.                                 if fireproximityprompt then
  3833.                                     fireproximityprompt(v)
  3834.                                 else
  3835.                                     interactWithChest(v.Parent.Name)
  3836.                                 end
  3837.                                 task.wait(1)
  3838.                             end
  3839.                         end
  3840.                     end
  3841.                 end
  3842.             end
  3843.             DestroyGhostItems()
  3844.             task.wait(1)
  3845.         end
  3846.     end,
  3847. })
  3848.  
  3849.  
  3850. local treasureGroupButton = sections.Item4:AddGroupButton()
  3851.  
  3852. treasureGroupButton:AddButton({
  3853.     Title = "Repair Held Map",
  3854.     Variant = "Outline",
  3855.     Callback = function()
  3856.         -- should add a check to see if they're holding or not lol
  3857.         workspace.world.npcs["Jack Marrow"].treasure.repairmap:InvokeServer()
  3858.     end,
  3859. })
  3860.  
  3861. treasureGroupButton:AddButton({
  3862.     Title = "Use Held Map",
  3863.     Variant = "Outline",
  3864.     Callback = function()
  3865.         local treasureCoordinates = tostring(LocalPlayer.PlayerGui["Treasure Map"].Main.CoordinatesLabel.Text)
  3866.  
  3867.         -- Extract the coordinates from the text
  3868.         local x, y, z = treasureCoordinates:match("X ([%d%.%-]+), Y ([%d%.%-]+), Z ([%d%.%-]+)")
  3869.        
  3870.         if x and y and z then
  3871.             local formattedString = string.format("TreasureChest_%s_%s_%s", x, y, z)
  3872.             print(formattedString)
  3873.            
  3874.             local chest = workspace.world.chests:FindFirstChild(formattedString)
  3875.             if chest then
  3876.                 if fireproximityprompt then
  3877.                     fireproximityprompt(chest.ProximityPrompt)
  3878.                 else      
  3879.                     interactWithChest(chest)
  3880.                 end
  3881.             else
  3882.                 lib:Notification("Use Held Map", "Treasure chest not found!", 5)
  3883.             end
  3884.            
  3885.             task.wait()
  3886.         else
  3887.             lib:Notification("Use Held Map", "An error has occurred, make sure you're holding the map.", 5)
  3888.         end
  3889.     end,
  3890. })
  3891.  
  3892. -- treasureGroupButton:AddButton({
  3893. --     Title = "Repair All Maps",
  3894. --     Variant = "Primary",
  3895. --     Callback = function()
  3896. --         for i, v in pairs(game.Players.LocalPlayer.Backpack:GetChildren()) do
  3897. --             if v.Name == "Treasure Map" then
  3898. --                 game.Players.LocalPlayer.Character.Humanoid:EquipTool(v)
  3899. --                 print("equipped, remote..")
  3900. --                 workspace.world.npcs["Jack Marrow"].treasure.repairmap:InvokeServer()
  3901. --                 print("remote success")
  3902. --             end
  3903. --         end
  3904. --     end,
  3905. -- })
  3906.  
  3907. -- treasureGroupButton:AddButton({
  3908. --     Title = "Collect All Treasures",
  3909. --     Variant = "Primary",
  3910. --     Callback = function()
  3911. --         for i, v in pairs(workspace.world.chests:GetDescendants()) do
  3912. --             if v:IsA("Part") and v:FindFirstChild("ChestSetup") then
  3913. --                 for _, v in pairs(workspace.world.chests:GetDescendants()) do
  3914. --                     if v.Name == "ProximityPrompt" then
  3915. --                         task.wait(1)
  3916. --                         fireproximityprompt(v)
  3917. --                     end
  3918. --                 end
  3919. --                 task.wait(1)
  3920. --             end
  3921. --         end
  3922. --     end,
  3923. -- })
  3924.  
  3925.  
  3926. treasureGroupButton:AddButton({
  3927.     Title = "Use All Fillionaires",
  3928.     Variant = "Primary",
  3929.     Callback = function()
  3930.         LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3931.         local Fillionaire = LocalPlayer.Backpack:FindFirstChild("Fillionaire")
  3932.         local FillionaireLink = tostring(Fillionaire.link.Value)
  3933.         local FillionaireAmount = ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[FillionaireLink].Stack.Value
  3934.        
  3935.         if Fillionaire then
  3936.             for _ = 1, FillionaireAmount do
  3937.                 LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  3938.                 LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):EquipTool(Fillionaire)
  3939.             end
  3940.         end
  3941.         task.wait(1)
  3942.         local mainGui = LocalPlayer.PlayerGui.Fillionaire.Main
  3943.  
  3944.         for _, child in ipairs(mainGui:GetChildren()) do
  3945.             if child.Name == "Template" and child.Visible then
  3946.                 local playerNumbers = child:FindFirstChild("PlayerNumbers")
  3947.                 if playerNumbers then
  3948.                     for i = 1, 4 do
  3949.                         local numberButton = playerNumbers:FindFirstChild(tostring(i))
  3950.                         if numberButton and numberButton:IsA("GuiButton") then
  3951.                             if getconnections then
  3952.                                 for _, v in pairs(getconnections(numberButton.MouseButton1Click)) do
  3953.                                     v.Function()
  3954.                                 end
  3955.                             else
  3956.                                 firesignal(numberButton.MouseButton1Click)
  3957.                             end
  3958.                             -- print("Triggered MouseButton1Click for:", numberButton.Name) -- Debug
  3959.                         end
  3960.                     end
  3961.                 end
  3962.                 task.wait()
  3963.                 child:Destroy()
  3964.             end
  3965.         end
  3966.     end,
  3967. })
  3968.  
  3969. sections.Item4:AddParagraph({Title = gradient("Dupe Info"), Description = "<b>The items selected below will be duped.</b>\nFor example: If you have 20 treasure maps and use 3 and got the selected item, the remaining 17 maps will be used and you'll be left with 17 of that item."})
  3970.  
  3971. -- local treasureNames = {}
  3972. -- if type(data.Treasure) == "table" then
  3973. --     for treasureName, treasureData in pairs(data.Treasure) do
  3974. --         table.insert(treasureNames, treasureName)
  3975. --     end
  3976. -- end
  3977.  
  3978.  
  3979.  
  3980.  
  3981. sections.Item4:AddDropdown("TreasureItems", {
  3982.     Title = "Select Item(s)",
  3983.     Description = "",
  3984.     PlaceHolder = "Select Item - Treasure",
  3985.     Options = {"Aurora Totem", "Meteor Totem", "Tempest Totem", "Fillionaire", "Magic Thread", "Ancient Thread", "Lunar Thread", "Weird Algae", "Truffle Worm", "Quality Bait Crate", "XP (Untested)", "[Sunken] Fish"},
  3986.     Default = "",
  3987.     Multiple = true,
  3988.     Callback = function(SelectedTreasureItems)
  3989.         -- Modify the selected items
  3990.         genv.SelectedTreasureItems = {}
  3991.  
  3992.         for _, item in ipairs(SelectedTreasureItems) do
  3993.             if item == "XP (Untested)" then
  3994.                 table.insert(genv.SelectedTreasureItems, "XP")
  3995.             elseif item == "[Sunken] Fish" then
  3996.                 table.insert(genv.SelectedTreasureItems, "Sunken")
  3997.             else
  3998.                 table.insert(genv.SelectedTreasureItems, item)
  3999.             end
  4000.         end
  4001.  
  4002.         -- Debug: Print the modified list
  4003.         print("Selected Treasure Items:", table.concat(genv.SelectedTreasureItems, ", "))
  4004.     end,
  4005. })
  4006.  
  4007.  
  4008.  
  4009. sections.Item4:AddToggle("EnableTreasureDupe", {
  4010.     Title = "Enable Treasure Dupe",
  4011.     Default = false,
  4012.     Description = "Auto Repair & Collect Treasures still needs to be on.",
  4013.     Callback = function(isEnabled)
  4014.         genv.TreasureDupeAllowed = isEnabled
  4015.         print()
  4016.     end,
  4017. })
  4018.  
  4019. sections.Item4:AddSlider("MinMapAmount", {
  4020.     Title = "Minimum Map Amount",
  4021.     Description = "20 is recommended for more effective duping.",
  4022.     Default = 20,
  4023.     Min = 0,
  4024.     Max = 20,
  4025.     Increment = 1,
  4026.     Callback = function(value)
  4027.         genv.MinMapAmount = value
  4028.     end,
  4029. })
  4030.  
  4031.  
  4032. variables.TeleLocationParagraph = sections.Tele:AddParagraph({Title = gradient("Location Info"), Description = "X,Y,Z | Location"})
  4033.  
  4034. task.spawn(function()
  4035.     while wait(1) do
  4036.         local position = LocalPlayer.Character.HumanoidRootPart.Position
  4037.         local zone = workspace[LocalPlayer.Name].zone.Value
  4038.         formattedPosition = string.format("%.1f, %.1f, %.1f", position.X, position.Y, position.Z)
  4039.         formattedPositionWithZone = string.format("%.1f, %.1f, %.1f | %s", position.X, position.Y, position.Z, tostring(zone))
  4040.         variables.TeleLocationParagraph:SetDesc(formattedPositionWithZone)
  4041.     end
  4042. end)
  4043.  
  4044.  
  4045.  
  4046. local function loadSavedLocations()
  4047.     pcall(function()
  4048.         local savedLocations = {}
  4049.         local savedPositions = {}
  4050.         local data = readfile("Lunor/Fisch/saved_teleports.json")
  4051.  
  4052.        
  4053.         for teleportSaveName, formattedPosition in data:gmatch('"(.-)" = "(.-)"') do
  4054.             table.insert(savedLocations, teleportSaveName)
  4055.             savedPositions[teleportSaveName] = formattedPosition
  4056.         end
  4057.  
  4058.         return savedLocations, savedPositions
  4059.     end)
  4060. end
  4061.  
  4062. savedLocations, savedPositions = loadSavedLocations()
  4063.  
  4064. genv.SavedLocationsDropDown = sections.Tele:AddDropdown("SavedLocations", {
  4065.     Title = "Saved Locations Teleport",
  4066.     Description = "",
  4067.     Options = savedLocations,
  4068.     PlaceHolder = "Select Location",
  4069.     Default = "",
  4070.     Multiple = false,
  4071.     Callback = function(selectedLocation)
  4072.         local position = savedPositions[selectedLocation]
  4073.         genv.SelectedSavedLocations = savedPositions[selectedLocation]
  4074.         if position then
  4075.             local x, y, z = position:match("([^,]+),([^,]+),([^,]+)")
  4076.             x, y, z = tonumber(x), tonumber(y), tonumber(z)
  4077.             ChangePlayerCFrame(x, y, z)
  4078.         end
  4079.     end,
  4080. })
  4081.  
  4082. sections.Tele:AddTextbox({
  4083.     Title = "Save: Name",
  4084.     Default = "",
  4085.     Description = "",
  4086.     PlaceHolder = "Input",
  4087.     TextDisappear = false,
  4088.     Callback = function(teleportSaveName)
  4089.         variables.teleportSaveName = teleportSaveName
  4090.     end
  4091. })
  4092.  
  4093. local teleportGroupButton = sections.Tele:AddGroupButton()
  4094.  
  4095. teleportGroupButton:AddButton({
  4096.     Title = "Save Location",
  4097.     Callback = function()
  4098.         if formattedPosition then
  4099.             local teleportData = string.format('"%s" = "%s"\n', variables.teleportSaveName, formattedPosition)
  4100.             appendfile("Lunor/Fisch/saved_teleports.json", teleportData)
  4101.             lib:Notification("Save Location", "Successfully saved location " .. formattedPosition .. " as " .. variables.teleportSaveName, 5)
  4102.             savedLocations, savedPositions = loadSavedLocations()
  4103.             genv.SavedLocationsDropDown:Refresh(savedLocations, true)
  4104.         else
  4105.             lib:Notification("Error", "Formatted position is nil. Cannot save location.", 5)
  4106.         end
  4107.     end,
  4108. })
  4109.  
  4110.  
  4111. teleportGroupButton:AddButton({
  4112.     Title = "Delete Location",
  4113.     Callback = function()
  4114.         local selectedLocation = genv.SavedLocationsDropDown.Value
  4115.         if selectedLocation and selectedLocation ~= "" then
  4116.             -- Read current file content
  4117.             local data = readfile("Lunor/Fisch/saved_teleports.json")
  4118.            
  4119.             -- Create new content excluding the selected location
  4120.             local newContent = ""
  4121.             for teleportSaveName, formattedPosition in data:gmatch('"(.-)" = "(.-)"') do
  4122.                 if teleportSaveName ~= selectedLocation then
  4123.                     newContent = newContent .. string.format('"%s" = "%s"\n', teleportSaveName, formattedPosition)
  4124.                 end
  4125.             end
  4126.            
  4127.             -- Write the new content back to file
  4128.             writefile("Lunor/Fisch/saved_teleports.json", newContent)
  4129.            
  4130.             -- Update the saved locations and refresh dropdown
  4131.             savedLocations, savedPositions = loadSavedLocations()
  4132.             genv.SavedLocationsDropDown:Refresh(savedLocations, true)
  4133.             genv.SavedLocationsDropDown:Set()
  4134.            
  4135.             -- Show success notification
  4136.             lib:Notification("Delete Location", "Successfully deleted location: " .. selectedLocation, 5)
  4137.         else
  4138.             lib:Notification("Error", "Please select a location to delete", 5)
  4139.         end
  4140.     end,
  4141. })
  4142.  
  4143. sections.Tele1:AddDropdown("TeleportMethod", {
  4144.     Title = "Teleportation Method",
  4145.     Description = "Choose CFrame for instant teleportation or Tween for a smooth flight to the destination.",
  4146.     Options = {"Tween", "CFrame"},
  4147.     Default = "CFrame",
  4148.     Multiple = false,
  4149.     Callback = function(selectedOptions)
  4150.         if selectedOptions == "CFrame" then
  4151.             variables.TeleportMethod = true
  4152.             variables.TweenMethod = false
  4153.         elseif selectedOptions == "Tween" then
  4154.             variables.TweenMethod = true
  4155.             variables.TeleportMethod = false
  4156.         end
  4157.     end,
  4158. })
  4159.  
  4160. local Players = Players
  4161. local Workspace = game:GetService("Workspace")
  4162.  
  4163. local persistentPlayers = {}
  4164.  
  4165. Workspace.ChildAdded:Connect(function(child)
  4166.     if child:IsA("Model") and Players:FindFirstChild(child.Name) then
  4167.         if child:FindFirstChild("Humanoid") then
  4168.             child.ModelStreamingMode = Enum.ModelStreamingMode.Persistent
  4169.             if not table.find(persistentPlayers, child.Name) then
  4170.                 table.insert(persistentPlayers, child.Name)
  4171.                 -- print("Updated Persistent List:", table.concat(persistentPlayers, ", "))
  4172.                 pcall(function()
  4173.                     genv.PlayerDropDown:Refresh(persistentPlayers, true)
  4174.                     genv.PlayerDropDown:Set(persistentPlayers)
  4175.                 end)
  4176.             end
  4177.         end
  4178.     end
  4179. end)
  4180.  
  4181. Players.PlayerAdded:Connect(function(player)
  4182.     player.CharacterAdded:Connect(function(character)
  4183.         if character:FindFirstChild("Humanoid") then
  4184.             character.ModelStreamingMode = Enum.ModelStreamingMode.Persistent
  4185.             if not table.find(persistentPlayers, player.Name) then
  4186.                 table.insert(persistentPlayers, player.Name)
  4187.                 -- print("Updated Persistent List:", table.concat(persistentPlayers, ", "))
  4188.                 pcall(function()
  4189.                     genv.PlayerDropDown:Refresh(persistentPlayers, true)
  4190.                     genv.PlayerDropDown:Set(persistentPlayers)
  4191.                 end)
  4192.             end
  4193.         end
  4194.     end)
  4195. end)
  4196.  
  4197. for _, player in ipairs(Players:GetPlayers()) do
  4198.     if player.Character and player.Character:FindFirstChild("Humanoid") then
  4199.         player.Character.ModelStreamingMode = Enum.ModelStreamingMode.Persistent
  4200.         if not table.find(persistentPlayers, player.Name) then
  4201.             table.insert(persistentPlayers, player.Name)
  4202.         end
  4203.     end
  4204.     player.CharacterAdded:Connect(function(character)
  4205.         if character:FindFirstChild("Humanoid") then
  4206.             character.ModelStreamingMode = Enum.ModelStreamingMode.Persistent
  4207.             if not table.find(persistentPlayers, player.Name) then
  4208.                 table.insert(persistentPlayers, player.Name)
  4209.                 -- print("Updated Persistent List:", table.concat(persistentPlayers, ", "))
  4210.                 pcall(function()
  4211.                     genv.PlayerDropDown:Refresh(persistentPlayers, true)
  4212.                     genv.PlayerDropDown:Set(persistentPlayers)
  4213.                 end)
  4214.             end
  4215.         end
  4216.     end)
  4217. end
  4218.  
  4219. genv.PlayerDropDown = sections.Tele1:AddDropdown("PlayerTeleport", {
  4220.     Title = "Players",
  4221.     Description = "",
  4222.     Options = persistentPlayers,
  4223.     Default = "",
  4224.     PlaceHolder = "Select Player",
  4225.     Multiple = false,
  4226.     Callback = function(selectedPlayer)
  4227.         genv.selectedPlayer = selectedPlayer
  4228.         LocalPlayer.Character.HumanoidRootPart.CFrame = workspace[selectedPlayer].HumanoidRootPart.CFrame
  4229.     end,
  4230. })
  4231.  
  4232.  
  4233. sections.Tele1:AddDropdown("FishZones", {
  4234.     Title = "Fishing Zones",
  4235.     Description = "",
  4236.     Options = zoneNames,
  4237.     Default = "",
  4238.     PlaceHolder = "Select Zone",
  4239.     Multiple = false,
  4240.     Callback = function(selectedZone)
  4241.         genv.selectedZone = selectedZone
  4242.         local part = workspace.zones.fishing:FindFirstChild(selectedZone)
  4243.         if part then
  4244.             game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = part.CFrame
  4245.         end
  4246.     end,
  4247. })
  4248.  
  4249. local eventNames = {}  -- Create an empty table to store zone names
  4250. local nameCount = {}   -- Create a table to track the count of each name
  4251. local zoneMapping = {} -- Create a table to map display names to actual part names
  4252.  
  4253. -- Iterate through all children in the fishing zones
  4254. for _, child in pairs(workspace.zones.fishing:GetChildren()) do
  4255.     -- Check for zones that have a "beacon" and a "POIHeader" with a "title"
  4256.     if child:FindFirstChild("beacon") then
  4257.         local poiHeader = child:FindFirstChild("POIHeader")
  4258.         if poiHeader and poiHeader:FindFirstChild("title") and poiHeader.title:IsA("TextLabel") then
  4259.             local zoneName = poiHeader.title.Text
  4260.             -- Track the count of each name and modify the name if it's repeated
  4261.             if not nameCount[zoneName] then
  4262.                 nameCount[zoneName] = 1
  4263.             else
  4264.                 nameCount[zoneName] = nameCount[zoneName] + 1
  4265.             end
  4266.  
  4267.             -- If there are duplicates, append the count to the name
  4268.             if nameCount[zoneName] > 1 then
  4269.                 zoneName = zoneName .. " (" .. nameCount[zoneName] .. ")"
  4270.             end
  4271.  
  4272.             -- Map the display name to the actual part name
  4273.             zoneMapping[zoneName] = child.Name
  4274.  
  4275.             -- Add the modified zone name to the list
  4276.             table.insert(eventNames, zoneName)
  4277.         end
  4278.     end
  4279.  
  4280.     -- Check for zones with "Abundance", "Chance", and "Mutation"
  4281.     local abundance = child:FindFirstChild("Abundance")
  4282.     if abundance and abundance:FindFirstChild("Chance") and abundance:FindFirstChild("Mutation") then
  4283.         local zoneName = child.Name
  4284.         -- Track the count of each name and modify the name if it's repeated
  4285.         if not nameCount[zoneName] then
  4286.             nameCount[zoneName] = 1
  4287.         else
  4288.             nameCount[zoneName] = nameCount[zoneName] + 1
  4289.         end
  4290.  
  4291.         -- If there are duplicates, append the count to the name
  4292.         if nameCount[zoneName] > 1 then
  4293.             zoneName = zoneName .. " (" .. nameCount[zoneName] .. ")"
  4294.         end
  4295.  
  4296.         -- Map the display name to the actual part name
  4297.         zoneMapping[zoneName] = child.Name
  4298.  
  4299.         -- Add the modified zone name to the list
  4300.         table.insert(eventNames, zoneName)
  4301.     end
  4302. end
  4303.  
  4304.  
  4305. -- ill finish it tmr
  4306. sections.Tele1:AddDropdown("FishZones", {
  4307.     Title = "Events",
  4308.     Description = "",
  4309.     Options = eventNames,
  4310.     Default = "",
  4311.     PlaceHolder = "Select Event",
  4312.     Multiple = true,
  4313.     Callback = function(selectedEvents)
  4314.         genv.selectedEventOverrides = selectedEvents
  4315.         -- Find the selected part by name and teleport the player
  4316.         for _, event in ipairs(selectedEvents) do
  4317.             print("Selected event:", event)
  4318.  
  4319.             -- Get the actual part name from the zoneMapping table
  4320.             local actualZoneName = zoneMapping[event]
  4321.  
  4322.             if actualZoneName then
  4323.                 local part = workspace.zones.fishing:FindFirstChild(actualZoneName)
  4324.                 if part then
  4325.                     print("Teleporting to part:", part)
  4326.                     game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = part.CFrame
  4327.                 end
  4328.             end
  4329.         end
  4330.     end,
  4331. })
  4332.  
  4333.  
  4334. local areaTeleportNames = {}
  4335. genv.TpSpotsName = {}
  4336.  
  4337. for _, folder in pairs(workspace.world.spawns:GetChildren()) do
  4338.     if folder.Name ~= "TpSpots" and folder.Name ~= "loading" and folder.Name ~= "TeleportDelay" then
  4339.         table.insert(areaTeleportNames, folder.Name)
  4340.     end
  4341. end
  4342.  
  4343. for _,Place in pairs(workspace.world.spawns.TpSpots:GetChildren()) do
  4344.     table.insert(genv.TpSpotsName, Place.Name)
  4345. end
  4346.  
  4347. sections.Tele1:AddDropdown("AreaTeleports", {
  4348.     Title = "Areas",
  4349.     Description = "",
  4350.     Options = areaTeleportNames,
  4351.     PlaceHolder = "Select Area",
  4352.     Default = "",
  4353.     Multiple = false,
  4354.     Callback = function(selectedArea)
  4355.         local areaTeleportFolder = workspace.world.spawns:FindFirstChild(selectedArea)
  4356.         if areaTeleportFolder then
  4357.             local firstChild = areaTeleportFolder:GetChildren()[1]
  4358.             if firstChild and firstChild:IsA("BasePart") then
  4359.                 ChangePlayerCFrame(firstChild.Position.X, firstChild.Position.Y, firstChild.Position.Z)
  4360.             end
  4361.         end
  4362.     end
  4363. })
  4364.  
  4365. sections.Tele1:AddDropdown("AreaTeleports2", {
  4366.     Title = "TP Spots",
  4367.     Description = "",
  4368.     Options = genv.TpSpotsName,
  4369.     Default = "",
  4370.     PlaceHolder = "Select Spot",
  4371.     Multiple = false,
  4372.     Callback = function(selectedArea)
  4373.         _G.TPSpots = workspace.world.spawns.TpSpots:FindFirstChild(selectedArea)
  4374.        
  4375.         if _G.TPSpots then
  4376.             ChangePlayerCFrame(_G.TPSpots.Position.X, _G.TPSpots.Position.Y + 5, _G.TPSpots.Position.Z)
  4377.         else
  4378.             warn("Selected area '" .. selectedArea .. "' does not exist.")
  4379.         end
  4380.     end
  4381. })
  4382.  
  4383.  
  4384. local NPC = {
  4385.     ["Inn Keeper Forsaken Shores"] = "-2476.73779296875, 133.00003051757812, 1573.2672119140625",
  4386.     ["Summit Inn Keeper 1"] = "19664.458984375, 132.45314025878906, 5245.27783203125",
  4387.     ["Rhea"] = "-1038.4249267578125, 203.33749389648438, -1115.580078125",
  4388.     ["Kenith"] = "-1143.18017578125, 134.6342315673828, -1077.2073974609375",
  4389.     ["Skin Seller"] = "302.2337646484375, 132.14491271972656, 205.36087036132812",
  4390.     ["Forsaken Skin Merchant"] = "-2564.42578125, 148.63946533203125, 1645.054443359375",
  4391.     ["Terrapin Shipwright"] = "5869.421875, 143.49795532226562, 7.101318359375",
  4392.     ["Pierre"] = "391.3885498046875, 135.348388671875, 196.71238708496094",
  4393.     ["Alfredrickus"] = "-1520.84228515625, 141.5052947998047, 764.6096801757812",
  4394.     ["Inn Keeper Snowcap"] = "2660.8125, 155.0608367919922, 2395.78857421875",
  4395.     ["Snowcap Skin Merchant"] = "2652.446044921875, 141.2260284423828, 2537.990966796875",
  4396.     ["Mushgrove Elf"] = "2409.3662109375, 135.85812377929688, -732.3370361328125",
  4397.     ["Daisy"] = "581.550048828125, 165.49075317382812, 213.49996948242188",
  4398.     ["Idle Fishing NPC Moosewood2"] = "365.4126892089844, 132.44651794433594, 182.0972137451172",
  4399.     ["Mushgrove Skin Merchant"] = "2642.84814453125, 129.79051208496094, -708.4285278320312",
  4400.     ["Runaway Elf"] = "-7.39788818359375, 322.27178955078125, -9295.1376953125",
  4401.     ["Jack Marrow"] = "-2830.748046875, 215.2417449951172, 1518.34814453125",
  4402.     ["Terrapin Elf"] = "-160.50210571289062, 139.4464874267578, 1896.0755615234375",
  4403.     ["Claudia"] = "-7.519559383392334, 157.2010040283203, -1065.5740966796875",
  4404.     ["Idle Fishing NPC Moosewood"] = "423.3988037109375, 136.25140380859375, 333.18975830078125",
  4405.     ["Roslit Skin Merchant"] = "-1626.4571533203125, 133.33004760742188, 616.2025756835938",
  4406.     ["Terrapin Angler"] = "-1706.8802490234375, 148.00003051757812, 754.8173217773438",
  4407.     ["Summit Inn Keeper 4"] = "19889.65234375, 1154.7476806640625, 5510.896484375",
  4408.     ["Inn Keeper DesolateDeep"] = "-1651.9581298828125, -214.17938232421875, -2833.086669921875",
  4409.     ["Maverick Merchant"] = "-982.96435546875, -245.1102294921875, -2692.517333984375",
  4410.     ["Phineas"] = "469.91229248046875, 150.69342041015625, 277.9549865722656",
  4411.     ["Hiker #7"] = "19669.998046875, 140.966064453125, 5301.51953125",
  4412.     ["Mel Merchant"] = "-1658.4344482421875, -214.2913360595703, -2819.47314453125",
  4413.     ["Max Merchant"] = "-929.8687133789062, 131.07882690429688, -1104.6328125",
  4414.     ["Wilson"] = "2940.719482421875, 280.7838134765625, 2569.629638671875",
  4415.     ["Roddy"] = "-1004.0133056640625, -244.91015625, -2737.48291015625",
  4416.     ["Hiker #5"] = "19790.9453125, 415.4871826171875, 5418.53173828125",
  4417.     ["Hiker #11"] = "20062.3515625, 1136.42822265625, 5521.576171875",
  4418.     ["Forsaken Elf"] = "-2488.8203125, 134.00784301757812, 1474.3687744140625",
  4419.     ["Hiker #12"] = "19922.19921875, 1138.01318359375, 5357.24169921875",
  4420.     ["Latern Keeper"] = "658.4459838867188, 163.5, 260.2139892578125",
  4421.     ["???"] = "-85.54763793945312, -515.29931640625, 1135.826171875",
  4422.     ["Forsaken3"] = "-2706.95458984375, 165.62498474121094, 1755.236328125",
  4423.     ["Idle Fishing NPC 2.5"] = "-1778.79052734375, 148.22744750976562, 653.3268432617188",
  4424.     ["Moosewood Elf"] = "401.2041931152344, 136.28366088867188, 305.82623291015625",
  4425.     ["Miller Merchant"] = "19574.537109375, 132.71607971191406, 5312.08056640625",
  4426.     ["Hiker #2"] = "19526.990234375, 132.71607971191406, 5326.3896484375",
  4427.     ["Summit Inn Keeper 2"] = "19750.71875, 416.0520935058594, 5382.96484375",
  4428.     ["Hiker #3"] = "19824.34375, 130.375, 5216.85693359375",
  4429.     ["Roslit Shipwright"] = "-1452.0543212890625, 133.0000457763672, 745.169189453125",
  4430.     ["Hiker #1"] = "19603.392578125, 169.7622528076172, 5351.04443359375",
  4431.     ["Snowcap Shipwright"] = "2622.93994140625, 136.28387451171875, 2401.30517578125",
  4432.     ["Hiker #9"] = "19802.94921875, 424.77880859375, 5356.3935546875",
  4433.     ["Hiker #10"] = "19944.62109375, 1142.7388916015625, 5541.900390625",
  4434.     ["Desolate Skin Merchant"] = "-1573.1217041015625, -289.9115295410156, -2965.453125",
  4435.     ["Hiker #6"] = "20131.880859375, 208.6810760498047, 5453.31298828125",
  4436.     ["Statue Shipwright"] = "23.2196044921875, 135.03036499023438, -1007.029052734375",
  4437.     ["Quiet Synph"] = "566.2632446289062, 152.00003051757812, 353.8721008300781",
  4438.     ["Appraiser"] = "453.182373046875, 150.50003051757812, 206.90878295898438",
  4439.     ["Clarence"] = "-1625.3936767578125, -231.07135009765625, -2903.8525390625",
  4440.     ["Custos"] = "21.590187072753906, -707.9070434570312, 1253.7547607421875",
  4441.     ["Meteoriticist"] = "5921.576171875, 261.98199462890625, 596.27197265625",
  4442.     ["Tenebris"] = "1061.18408203125, -631.1304321289062, 1310.313232421875",
  4443.     ["Lucas"] = "449.3396301269531, 181.99989318847656, 180.68907165527344",
  4444.     ["Abyssus"] = "1399.0474853515625, -1016.0322875976562, 966.2442016601562",
  4445.     ["Marc Merchant"] = "466.1600341796875, 151.00205993652344, 224.49708557128906",
  4446.     ["Forsaken2"] = "-2586.603271484375, 149.00967407226562, 1682.072265625",
  4447.     ["Man Working On Rowboat"] = "-1446.365478515625, 134.98231506347656, 702.0789794921875",
  4448.     ["The Depths Angler"] = "981.8839111328125, -702.6148681640625, 1232.17529296875",
  4449.     ["Hiker #4"] = "19595.90234375, 132.71607971191406, 5271.5751953125",
  4450.     ["Perditus"] = "770.0521240234375, -730.6285400390625, 1383.4951171875",
  4451.     ["Inn Keeper Roslit"] = "-1512.37890625, 133.00003051757812, 631.2435302734375",
  4452.     ["Aspicientis"] = "1214.53125, -708.64404296875, 1320.8018798828125",
  4453.     ["Tom Elf"] = "404.63018798828125, 136.81517028808594, 317.099609375",
  4454.     ["Idle Fishing NPC 1"] = "-1428.9964599609375, 133.00003051757812, 686.034423828125",
  4455.     ["Forsaken1"] = "-2593.36572265625, 149.00970458984375, 1676.066162109375",
  4456.     ["Ancient Elf"] = "5813.37841796875, 147.48866271972656, 267.740234375",
  4457.     ["Merlin"] = "-928.0328369140625, 223.7000274658203, -998.7449951171875",
  4458.     ["Travelling Merchant"] = "-1059.0887451171875, 130.74203491210938, -1170.650390625",
  4459.     ["Gatherer Archaeologist"] = "6028.23388671875, 194.9801483154297, 298.5621337890625",
  4460.     ["Submersus"] = "1211.426513671875, -1015.798095703125, 1315.8280029296875",
  4461.     ["Roslit Elf"] = "-1919.3199462890625, 499.4999694824219, 162.685546875",
  4462.     ["Idle Fishing NPC 2"] = "-1778.5130615234375, 148.42538452148438, 648.0894775390625",
  4463.     ["Occultus"] = "1022.309326171875, -705.2661743164062, 1564.7314453125",
  4464.     ["Milo Merchant"] = "957.1780395507812, -711.5802001953125, 1263.293212890625",
  4465.     ["Mike Merchant"] = "2717.568359375, 157.17335510253906, 2374.478759765625",
  4466.     ["Analyst Archaeologist"] = "6086.53662109375, 194.98025512695312, 277.4117431640625",
  4467.     ["Henry"] = "483.539306640625, 152.383056640625, 236.296142578125",
  4468.     ["Marina"] = "68.12350463867188, 159.0147705078125, -1040.607177734375",
  4469.     ["Mann Merchant"] = "6080.77685546875, 194.97999572753906, 308.7760009765625",
  4470.     ["The Depths Skin Merchant"] = "1036.80517578125, -807.3424072265625, 1443.938232421875",
  4471.     ["Apprentice Archaeologist"] = "6087.63671875, 194.980224609375, 280.2427978515625",
  4472.     ["Chiseler"] = "6087.37841796875, 194.9801788330078, 294.5010986328125",
  4473.     ["AncientIsle Angler"] = "5738.27880859375, 176.99285888671875, -51.95977783203125",
  4474.     ["Ancient Skin Merchant"] = "6029.15380859375, 194.8448028564453, 266.4958190917969",
  4475.     ["Inn Keeper AncientIsle"] = "6047.9111328125, 198.47718811035156, 335.5181884765625",
  4476.     ["Explorer Archaeologist"] = "5971.81591796875, 258.9874572753906, 236.7926025390625",
  4477.     ["Jack"] = "-180.81967163085938, 145.87623596191406, 1954.0701904296875",
  4478.     ["Sleeper"] = "-1498.0291748046875, -234.701416015625, -2852.48828125",
  4479.     ["Statue Elf"] = "43.9637451171875, 144.2205810546875, -1029.9287109375",
  4480.     ["Sunstone Shipwright"] = "-945.2999267578125, 131.07882690429688, -1116.234619140625",
  4481.     ["Forsaken Shipwright"] = "-2476.388427734375, 133.1121368408203, 1540.5460205078125",
  4482.     ["Marytn Merchant"] = "-2509.317138671875, 135.78355407714844, 1583.0770263671875",
  4483.     ["Inn Keeper"] = "487.4584655761719, 150.80003356933594, 231.49893188476562",
  4484.     ["Summit Shipwright"] = "19609.19140625, 131.42013549804688, 5186.5927734375",
  4485.     ["Orc"] = "-1848.1353759765625, 165.7111358642578, 165.60140991210938",
  4486.     ["Sunstone Angler"] = "-886.2785034179688, 133.9722137451172, -1118.807373046875",
  4487.     ["Moosewood Skin Merchant"] = "416.0176086425781, 134.859619140625, 189.09486389160156",
  4488.     ["Synph"] = "-138.2506561279297, -512.3742065429688, 1131.9312744140625",
  4489.     ["Mushgrove Guard"] = "2520.591064453125, 160.1083984375, -890.6786499023438",
  4490.     ["Arnold"] = "320.1063232421875, 133.97727966308594, 264.3226013183594",
  4491.     ["Agaric"] = "2601.31982421875, 132.3877410888672, -729.6150512695312",
  4492.     ["Inn Keeper Sunstone"] = "-904.1670532226562, 131.57933044433594, -1104.810546875",
  4493.     ["Paul"] = "381.74188232421875, 136.50003051757812, 341.8910217285156",
  4494.     ["mirror Area"] = "HumanoidRootPart not found",
  4495.     ["Matt Merchant"] = "-1454.2396240234375, 133.00003051757812, 675.738037109375",
  4496.     ["Summit Inn Keeper 3"] = "20298.84765625, 706.5057373046875, 5748.56591796875",
  4497.     ["Mods Latern Keeper"] = "-39.045677185058594, -246.5999755859375, 195.6443634033203",
  4498.     ["Moosewood Angler"] = "480.10247802734375, 150.5010528564453, 302.2268981933594",
  4499.     ["Snowcap Elf"] = "2638.445556640625, 141.78384399414062, 2425.3388671875",
  4500.     ["Santa Claus"] = "-159.24945068359375, 364.6510009765625, -9497.666015625",
  4501.     ["Sunstone Elf"] = "-894.0286865234375, 133.57225036621094, -1112.41064453125",
  4502.     ["Idle Fishing NPC Terrapin"] = "-71.04296875, 133.08493041992188, 2036.72509765625",
  4503.     ["Drew"] = "-35.971435546875, 140.4624481201172, -1104.604248046875",
  4504.     ["Leeri"] = "-142.27484130859375, -548.29931640625, 1426.4293212890625",
  4505.     ["Cole"] = "-20.985851287841797, 136.49261474609375, -1135.5667724609375",
  4506.     ["Ashe"] = "-1709.9970703125, 150.34718322753906, 729.2640380859375",
  4507.     ["Mushgrove Shipwright"] = "2453.97265625, 130.52963256835938, -661.6033325195312",
  4508.     ["Moosewood Shipwright"] = "357.97259521484375, 133.615966796875, 258.154541015625",
  4509.     ["Perdido"] = "-98.76107788085938, -566.29931640625, 1549.70361328125",
  4510. }
  4511.  
  4512. local Interactable = {
  4513.     ["Windset Totem"] = "2851.57421875, 178.1171112060547, 2703.02294921875",
  4514.     ["Long Rod"] = "485.6950378417969, 171.6563262939453, 145.74610900878906",
  4515.     ["Tidebreaker"] = "-1637.361328125, -213.62155151367188, -2848.759033203125",
  4516.     ["Flimsy Rod"] = "471.1076965332031, 148.36170959472656, 229.64244079589844",
  4517.     ["Tempest Totem"] = "36.4246826171875, 133.02679443359375, 1946.0823974609375",
  4518.     ["Refill Station"] = "20063.865234375, 1134.41455078125, 5524 .5302734375",
  4519.     ["Fortune Rod"] = "-1520.879638671875, 141.2832794189453, 771.94677734375",
  4520.     ["Fast Rod"] = "447.1835632324219, 148.22573852539062, 220.1874542236328",
  4521.     ["Flippers"] = "-1636.26708984375, -214.4133758544922, -2850.9501953125",
  4522.     ["Red Energy Crystal"] = "19922.52734375, 1139.0325927734375, 5351.244140625",
  4523.     ["Lost Rod"] = "2879.876953125, 135.7919158935547, 2727.4814453125",
  4524.     ["Aurora Totem"] = "-1812.632568359375, -139.7498779296875, -3279.98779296875",
  4525.     ["Basic Diving Gear"] = "369.1747741699219, 132.5088348388672, 248.7053680419922",
  4526.     ["Beginner Oxygen Tank"] = "19782.734375, 413.361572265625, 5384.38720703125",
  4527.     ["Summit Rod"] = "20207.75390625, 736.0582885742188, 5711.3515625",
  4528.     ["Enchant Altar"] = "1310.5465087890625, -799.4696044921875, -82.7303466796875",
  4529.     ["Steady Rod"] = "-1511.2352294921875, 139.67950439453125, 759.4171142578125",
  4530.     ["Kings Rod"] = "1375.576416015625, -810.2017211914062, -303.5092468261719",
  4531.     ["Carbon Rod"] = "454.0836181640625, 150.59007263183594, 225.32882690429688",
  4532.     ["Lucky Rod"] = "446.08599853515625, 148.2530059814453, 222.16000366210938",
  4533.     ["Glider"] = "-1713.796142578125, 145.90367126464844, 740.8370361328125",
  4534.     ["Smokescreen Totem"] = "2791.712158203125, 137.3506622314453, -629.4522705078125",
  4535.     ["Training Rod"] = "457.69384765625, 148.35752868652344, 230.414306640625",
  4536.     ["Phoenix Rod"] = "5971.03125, 270.37750244140625, 852.37255859375",
  4537.     ["Magnet Rod"] = "-194.99887084960938, 130.14808654785156, 1930.9710693359375",
  4538.     ["Quality Bait Crate"] = "-177.6083526611328, 141.68313598632812, 1932.85693359375",
  4539.     ["Basic Oxygen Tank"] = "19523.20703125, 130.6274871826172, 5328.50634765625",
  4540.     ["Intermediate Oxygen Tank"] = "20214.212890625, 734.760498046875, 5715.3271484375",
  4541.     ["Crab Cage"] = "474.8035888671875, 149.66456604003906, 229.49468994140625",
  4542.     ["Bait Crate"] = "384.57513427734375, 135.3519287109375, 337.53399658203125",
  4543.     ["Coral Geode"] = "-1641.544921875, -214.0647735595703, -2845.41796875",
  4544.     ["Blizzard Totem"] = "20148.748046875, 740.1343994140625, 5803.6611328125",
  4545.     ["Rod Of The Depths"] = "1704.840087890625, -903.5467529296875, 1447.786865234375",
  4546.     ["Winter Cloak"] = "19950.82421875, 1143.836181640625, 5581.42529296875",
  4547.     ["Avalanche Rod"] = "19770.181640625, 415.68096923828125, 5419.19677734375",
  4548.     ["Arctic Rod"] = "19578.236328125, 132.33837890625, 5307.3828125",
  4549.     ["Advanced Oxygen Tank"] = "19948.294921875, 1140.8302001953125, 5540.115234375",
  4550.     ["Pickaxe"] = "19783.19140625, 415.7436218261719, 5391.92041015625",
  4551.     ["Rapid Rod"] = "-1509.24462890625, 139.7259063720703, 759.628173828125",
  4552.     ["GPS"] = "517.896728515625, 149.21763610839844, 284.8568420410156",
  4553.     ["Meteor Totem"] = "-1945.8262939453125, 272.4389953613281, 231.54412841796875",
  4554.     ["Nocturnal Rod"] = "-141.87423706054688, -515.3135375976562, 1139.0452880859375",
  4555.     ["Sundial Totem"] = "-1149.452880859375, 134.5681915283203, -1077.2763671875",
  4556.     ["Plastic Rod"] = "454.4253845214844, 148.16973876953125, 229.17242431640625",
  4557.     ["Advanced Glider"] = "19939.048828125, 1140.6904296875, 5542.84912109375",
  4558.     ["Fish Radar"] = "365.75177001953125, 134.50498962402344, 274.1058044433594",
  4559.     ["Eclipse Totem"] = "5967.28271484375, 272.2904968261719, 836.9033813476562",
  4560.     ["Scurvy Rod"] = "-2828.218505859375, 213.4571990966797, 1512.2095947265625",
  4561.     ["Conception Conch"] = "-104.02766418457031, -735.5084838867188, 1211.6905517578125",
  4562.     ["Heaven's Rod"] = "20025.7578125, -468.9183654785156, 7146.93310546875",
  4563. }
  4564.  
  4565.  
  4566. local OptionnsInteractable = {}
  4567. local OptionsNpc = {}
  4568.  
  4569. for name, _ in pairs(NPC) do
  4570.     table.insert(OptionsNpc, name)
  4571. end
  4572.  
  4573. for name, _ in pairs(Interactable) do
  4574.     table.insert(OptionnsInteractable, name)
  4575. end
  4576.  
  4577. function parseCoordinates(coordString)
  4578.     local coords = {}
  4579.     for num in string.gmatch(coordString, "[-%d%.]+") do
  4580.         table.insert(coords, tonumber(num))
  4581.     end
  4582.     return unpack(coords)
  4583. end
  4584.  
  4585. for _, folder in pairs(workspace.world.spawns:GetChildren()) do
  4586.     if folder.Name ~= "TpSpots" and folder.Name ~= "loading" and folder.Name ~= "TeleportDelay" then
  4587.         table.insert(areaTeleportNames, folder.Name)
  4588.     end
  4589. end
  4590.  
  4591. sections.Tele1:AddDropdown("AreaTeleports3", {
  4592.     Title = "Interactables",
  4593.     Description = "",
  4594.     Options = OptionnsInteractable,
  4595.     Default = "",
  4596.     PlaceHolder = "Select Spot",
  4597.     Multiple = false,
  4598.     Callback = function(selectedArea)
  4599.         local coordString = Interactable[selectedArea]
  4600.         if coordString then
  4601.             ChangePlayerCFrame(parseCoordinates(coordString))
  4602.         end
  4603.     end
  4604. })
  4605.  
  4606. sections.Tele1:AddDropdown("AreaTeleports4", {
  4607.     Title = "NPCs",
  4608.     Description = "",
  4609.     Options = OptionsNpc,
  4610.     Default = "",
  4611.     PlaceHolder = "Select",
  4612.     Multiple = false,
  4613.     Callback = function(selectedNpc)
  4614.         local coordString = NPC[selectedNpc]
  4615.         if coordString then
  4616.             ChangePlayerCFrame(parseCoordinates(coordString))
  4617.         end
  4618.     end
  4619. })
  4620.  
  4621.  
  4622. sections.Tele2:AddTextbox({
  4623.     Title = "TP To Coordinates",
  4624.     PlaceHolder = "Enter Coords | Example: 1234,128,1239",
  4625.     Default = "",
  4626.     Description = "",  
  4627.     TextDisappear = true,
  4628.     Callback = function(TPCoord)
  4629.         local Coords = tostring(TPCoord)
  4630.         -- Split the string into x, y, z components
  4631.         local x, y, z = Coords:match("([^,]+),([^,]+),([^,]+)")
  4632.        
  4633.         -- Convert the string values to numbers
  4634.         local targetPosition = Vector3.new(tonumber(x), tonumber(y), tonumber(z))
  4635.        
  4636.         -- Set the player's position
  4637.         game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = CFrame.new(targetPosition)
  4638.        
  4639.     end
  4640. })
  4641.  
  4642. sections.Tele2:AddButton({
  4643.     Title = "Discover All Locations",
  4644.     Variant = "Primary",
  4645.     Callback = function()
  4646.         for key, value in pairs(data.Locations) do
  4647.             services.ReplicatedStorage:WaitForChild("events"):WaitForChild("discoverlocation"):FireServer(key)
  4648.         end
  4649.     end,
  4650. })
  4651.  
  4652. sections.Tele2:AddParagraph({Title = "Something cool is coming..", Description = "Soon."})
  4653.  
  4654. -- genv.ROTDParagraph = sections.Tele2:AddParagraph({Title = "<font color=\"rgb(240, 50, 50)\">Rod Of The Depths</font>",
  4655. --                              Description = "Requirements:\n- Vertigo Bestiary Completed\n- Opened The Depths Door\n- Abyssal Enchant Relic\n- Hexed Enchant Relic\n- 750,000 C$\n<font color=\"rgb(255, 255, 255)\">Do not touch anything while it completes it.</font>"})
  4656.  
  4657. -- local ROTDGroupButton = sections.Tele2:AddGroupButton()
  4658.  
  4659. -- function ROTDCheck()
  4660. --     local Players = services.Players
  4661. --     local ReplicatedStorage = services.ReplicatedStorage
  4662. --     local LocalPlayer = Players.LocalPlayer
  4663. --     local Bestiary = ReplicatedStorage.playerstats[LocalPlayer.Name]:FindFirstChild("Bestiary")
  4664. --     local Cache = ReplicatedStorage.playerstats[LocalPlayer.Name]:FindFirstChild("Cache")
  4665. --     local Coins = ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value
  4666. --     local inventory = ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory
  4667.    
  4668. --     local requiredChildren = {
  4669. --         "Night Shrimp",
  4670. --         "Spiderfish",
  4671. --         "Twilight Eel",
  4672. --         "Fangborn Gar",
  4673. --         "Abyssacuda",
  4674. --         "Voidfin Mahi",
  4675. --         "Rubber Ducky",
  4676. --         "Isonade",
  4677. --         "The Depths Key",
  4678. --     }
  4679.    
  4680. --     local allFound = true
  4681. --     for _, childName in ipairs(requiredChildren) do
  4682. --         if not Bestiary or not Bestiary:FindFirstChild(childName) then
  4683. --             allFound = false
  4684. --             break
  4685. --         end
  4686. --     end
  4687.    
  4688. --     local bestiaryStatus = allFound and "<font color=\"rgb(0, 255, 0)\">Vertigo Bestiary Completed</font>"
  4689. --                           or "<font color=\"rgb(255, 0, 0)\">Vertigo Bestiary Completed</font>"
  4690.    
  4691. --     local doorStatus = Cache and Cache:FindFirstChild("Door.TheDepthsGate") and
  4692. --                        "<font color=\"rgb(0, 255, 0)\">Opened The Depths Door</font>"
  4693. --                        or "<font color=\"rgb(255, 0, 0)\">Opened The Depths Door</font>"
  4694.    
  4695. --     local coinsStatus = Coins > 750000 and "<font color=\"rgb(0, 255, 0)\">750,000 C$</font>"
  4696. --                             or "<font color=\"rgb(255, 0, 0)\">750,000 C$</font>"
  4697.    
  4698. --     local hexedStatus = false
  4699. --     local abyssalStatus = false
  4700. --     for _, item in pairs(inventory:GetChildren()) do
  4701. --         if item.Name:find("Enchant Relic") then
  4702. --             if item:FindFirstChild("Mutation") then
  4703. --                 if item.Mutation.Value == "Hexed" then
  4704. --                     hexedStatus = true
  4705. --                 end
  4706. --                 if item.Mutation.Value == "Abyssal" then
  4707. --                     abyssalStatus = true
  4708. --                 end
  4709. --             end
  4710. --         end
  4711. --     end
  4712.    
  4713. --     local hexedStatusText = hexedStatus and "<font color=\"rgb(0, 255, 0)\">Hexed Enchant Relic</font>"
  4714. --                                         or "<font color=\"rgb(255, 0, 0)\">Hexed Enchant Relic</font>"
  4715.    
  4716. --     local abyssalStatusText = abyssalStatus and "<font color=\"rgb(0, 255, 0)\">Abyssal Enchant Relic</font>"
  4717. --                                           or "<font color=\"rgb(255, 0, 0)\">Abyssal Enchant Relic</font>"
  4718.    
  4719. --     genv.ROTDParagraph:SetDesc(
  4720. --         "Requirements:\n" ..
  4721. --         "- " .. bestiaryStatus .. "\n" ..
  4722. --         "- " .. doorStatus .. "\n" ..
  4723. --         "- " .. abyssalStatusText .. "\n" ..
  4724. --         "- " .. hexedStatusText .. "\n" ..
  4725. --         "- " .. coinsStatus .. "\n" ..
  4726. --         "<font color=\"rgb(255, 255, 255)\">Do not touch anything while it completes it.</font>"
  4727. --     )
  4728. -- end
  4729.  
  4730.  
  4731.  
  4732. -- ROTDGroupButton:AddButton({
  4733. --     Title = "Check Requirements",
  4734. --     Variant = "Outline",
  4735. --     Callback = function()
  4736. --         ROTDCheck()
  4737. --     end,
  4738. -- })
  4739.  
  4740.  
  4741. -- ROTDGroupButton:AddButton({
  4742. --     Title = "Complete & Buy ROTD",
  4743. --     Variant = "Primary",
  4744. --     Callback = function()
  4745. --         print("zz")
  4746. --     end,
  4747. -- })
  4748.  
  4749. -- genv.HeavenParagraph = sections.Tele2:AddParagraph({Title = "<font color=\"rgb(255, 255, 0)\">Heaven's Rod</font>",
  4750. --                              Description = "Requirements:\n- 1,750,000 C$\n<font color=\"rgb(255, 255, 255)\">Do not touch anything while it completes it.</font>"})
  4751.  
  4752. -- local HeavenGroupButton = sections.Tele2:AddGroupButton()
  4753.  
  4754. -- function HeavenCheck()
  4755. --     local Players = services.Players
  4756. --     local ReplicatedStorage = services.ReplicatedStorage
  4757. --     local LocalPlayer = Players.LocalPlayer
  4758. --     local Coins = ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.coins.Value
  4759.    
  4760. --     local coinsStatus = Coins > 1750000 and "<font color=\"rgb(0, 255, 0)\">1,750,000 C$</font>"
  4761. --                             or "<font color=\"rgb(255, 0, 0)\">1,750,000 C$</font>"
  4762.    
  4763. --     genv.HeavenParagraph:SetDesc(
  4764. --         "Requirements:\n" ..
  4765. --         "- " .. coinsStatus .. "\n" ..
  4766. --         "<font color=\"rgb(255, 255, 255)\">Do not touch anything while it completes it.</font>"
  4767. --     )
  4768. -- end
  4769.  
  4770.  
  4771. -- HeavenGroupButton:AddButton({
  4772. --     Title = "Check Requirements",
  4773. --     Variant = "Outline",
  4774. --     Callback = function()
  4775. --         HeavenCheck()
  4776. --     end,
  4777. -- })
  4778. -- function HeavenRodGrabber()
  4779. --     local Players = services.Players
  4780. --     local Workspace = game:GetService("Workspace")
  4781. --     local ReplicatedStorage = services.ReplicatedStorage
  4782. --     local LocalPlayer = Players.LocalPlayer
  4783. --     LocalPlayer:RequestStreamAroundAsync(Vector3.new(20125.1328125, 210.0240020751953, 5449.103515625))
  4784. --     local BlueShardPath = nil
  4785. --     for _, v in pairs(Workspace.world.map["Northern Summit"]:GetDescendants()) do
  4786. --         if v:IsA("MeshPart") and v.Name == "Meshes/Shard1" and v.BrickColor == BrickColor.new("Electric blue") then
  4787. --             BlueShardPath = v.Parent.Parent
  4788. --             print(BlueShardPath)
  4789. --             break
  4790. --         end
  4791. --     end
  4792. --     LocalPlayer:RequestStreamAroundAsync(Vector3.new(19500.53515625, 332.25433349609375, 5548.9072265625))
  4793. --     local YellowShardPath = nil
  4794. --     for _, child in ipairs(workspace.world.map["Northern Summit"]:GetChildren()) do
  4795. --         if child.ClassName == "Model" and child:GetAttribute("ItemName") == "Yellow Energy Crystal" then
  4796. --             print(child.Name)
  4797. --             child.ModelStreamingMode = Enum.ModelStreamingMode.Persistent
  4798. --             YellowShardPath = child
  4799. --         end
  4800. --     end
  4801.  
  4802. --     while genv.ProccessingRod do
  4803. --         local Backpack = LocalPlayer.Backpack
  4804. --         local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
  4805. --         if not Backpack:FindFirstChild("Pickaxe") then
  4806. --             services.ReplicatedStorage.events.purchase:FireServer("Pickaxe", "Item", nil, 1)
  4807. --         end
  4808. --         if not Backpack:FindFirstChild("Blue Energy Crystal") then
  4809. --             Character.HumanoidRootPart.CFrame = CFrame.new(20125.296875, 212.6418914794922, 5449.6962890625)
  4810. --             local Pickaxe = Backpack:FindFirstChild("Pickaxe") or Character:FindFirstChild("Pickaxe")
  4811. --             if Pickaxe then
  4812. --                 if Pickaxe.Parent == Backpack then
  4813. --                     Pickaxe.Parent = Character
  4814. --                 end
  4815. --                 repeat task.wait()
  4816. --                     Character.HumanoidRootPart.CFrame = CFrame.new(20125.296875, 212.6418914794922, 5449.6962890625)
  4817. --                     Character:FindFirstChild("Pickaxe"):Activate()
  4818. --                 until BlueShardPath:FindFirstChild("Root"):FindFirstChild("Prompt").Enabled
  4819. --                 fireproximityprompt(BlueShardPath.Root.Prompt)
  4820. --             end
  4821. --         end
  4822.  
  4823. --         if not Backpack:FindFirstChild("Green Energy Crystal") then
  4824. --         services.ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RF/NorthEvent/PlayerClaimItem"):InvokeServer()
  4825. --         end
  4826.  
  4827. --         if not Backpack:FindFirstChild("Red Energy Crystal") then
  4828. --             services.ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RF/NorthExp/PurchaseShard"):InvokeServer()
  4829. --         end
  4830. --         if not Backpack:FindFirstChild("Avalanche Totem") then
  4831. --             services.ReplicatedStorage.events.purchase:FireServer("Avalanche Totem", "Item", nil, 1)
  4832. --         end
  4833. --         repeat task.wait() until not services.ReplicatedStorage.world.totemInUse.value
  4834. --         game.Players.LocalPlayer.Character.Humanoid:EquipTool(services.Players.LocalPlayer.Backpack["Avalanche Totem"])
  4835. --         Character:WaitForChild("Avalanche Totem"):Activate()
  4836. --         repeat task.wait() until YellowShardPath.Root.Prompt.Enabled
  4837. --         LocalPlayer.Character.HumanoidRootPart.Position = YellowShardPath.Root.Position
  4838. --         YellowShardPath.Root.Prompt.Parent = LocalPlayer.Character
  4839. --         local char = LocalPlayer.Character
  4840. --         for _, obj in ipairs(char:GetChildren()) do
  4841. --             if obj:IsA("ProximityPrompt") then
  4842. --                 obj.HoldDuration = 0
  4843. --                 obj.MaxActivationDistance = math.huge
  4844. --                 obj:InputHoldBegin()
  4845. --                 task.wait(0.01)
  4846. --                 obj:InputHoldEnd()
  4847. --                 print("shoulda gotten it..")
  4848. --                 obj.Parent = YellowShardPath.Root
  4849. --             end
  4850. --         end
  4851. --         LocalPlayer:RequestStreamAroundAsync(Vector3.new(19964.609375, 1135.482666015625, 5348.857421875))
  4852. --         LocalPlayer.Character.HumanoidRootPart.Position  = workspace.world.map["Northern Summit"].ColoredGlassFloor.Hitbox.Position
  4853. --         local Crystals = {"Blue", "Green", "Red", "Yellow"}
  4854. --         local remote = services.ReplicatedStorage.packages.Net["RE/NorthFinalPuzzleService/Place"]
  4855.  
  4856. --         for _, crystal in ipairs(Crystals) do
  4857. --             remote:FireServer(crystal)
  4858. --         end
  4859.  
  4860. --         task.wait()
  4861. --     end
  4862. -- end
  4863.  
  4864. -- HeavenGroupButton:AddButton({
  4865. --     Title = "Complete & Buy Heaven's Rod",
  4866. --     Variant = "Primary",
  4867. --     Callback = function()
  4868. --         genv.ProccessingRod = true
  4869. --         HeavenRodGrabber()
  4870. --     end,
  4871. -- })
  4872.  
  4873.  
  4874.  
  4875. -- for _, spawnFolder in ipairs(workspace.world.spawns:GetChildren()) do
  4876. --     if spawnFolder:IsA("Folder") then
  4877. --         local newSection = tabs.Teleporation:AddSection({Title = spawnFolder.Name})
  4878. --         table.insert(sections, newSection)
  4879.  
  4880. --         newSection:AddParagraph({
  4881. --             Title = spawnFolder.Name,
  4882. --             Description = "Teleport Section for " .. spawnFolder.Name
  4883. --         })
  4884.  
  4885. --         TeleportationButton[spawnFolder.Name] = {
  4886. --             Section = newSection,
  4887. --             T1 = newSection:AddGroupButton()
  4888. --         }
  4889.  
  4890. --         for _, spawnPoint in ipairs(spawnFolder:GetChildren()) do
  4891. --             if spawnPoint:IsA("BasePart") then
  4892. --                 local spawnPosition = spawnPoint.Position
  4893.  
  4894. --                 local baseName = spawnPoint.Name
  4895. --                 local uniqueName = baseName
  4896.  
  4897. --                 if nameCounts[baseName] then
  4898. --                     nameCounts[baseName] = nameCounts[baseName] + 1
  4899. --                     uniqueName = baseName .. " (" .. nameCounts[baseName] .. ")"
  4900. --                 else
  4901. --                     nameCounts[baseName] = 1
  4902. --                 end
  4903.  
  4904. --                 TeleportationButton[spawnFolder.Name].T1:AddButton({
  4905. --                     Title = uniqueName,
  4906. --                     Variant = "Outline",
  4907. --                     Callback = function()
  4908. --                         ChangePlayerCFrame(spawnPosition.X, spawnPosition.Y, spawnPosition.Z)
  4909. --                     end,
  4910. --                 })
  4911. --             end
  4912. --         end
  4913. --     end
  4914. -- end
  4915.  
  4916. sections.Misc:AddParagraph({
  4917.     Title = gradient("Oxygen"),
  4918. })
  4919.  
  4920. local oxygenConnection
  4921. local oxygenPeaksConnection
  4922. local temperatureConnection
  4923.  
  4924. sections.Misc:AddToggle("AntiDrown", {
  4925.     Title = "Disable Oxygen - Normal",
  4926.     Default = true,
  4927.     Description = "",
  4928.     Callback = function(isEnabled)
  4929.         local oxygen = LocalPlayer.Character:FindFirstChild("client") and LocalPlayer.Character.client:FindFirstChild("oxygen")
  4930.         -- print("Oxygen Object:", oxygen)
  4931.         if isEnabled then
  4932.             if oxygen then
  4933.                 -- print("Connecting to Oxygen Normal")
  4934.                 oxygen.Disabled = true
  4935.                 oxygenConnection = oxygen.Changed:Connect(function()
  4936.                     -- print("Oxygen Changed - Disabled:", oxygen.Disabled)
  4937.                     oxygen.Disabled = true
  4938.                 end)
  4939.             end
  4940.         else
  4941.             if oxygenConnection then
  4942.                 -- print("Disconnecting Oxygen Normal connection")
  4943.                 oxygenConnection:Disconnect()
  4944.                 oxygen.Enabled = true
  4945.             end
  4946.         end
  4947.     end,
  4948. })
  4949.  
  4950. sections.Misc:AddToggle("AntiDrown", {
  4951.     Title = "Disable Oxygen - Peaks",
  4952.     Default = true,
  4953.     Description = "",
  4954.     Callback = function(isEnabled)
  4955.         local oxygenPeaks = LocalPlayer.Character:FindFirstChild("client") and LocalPlayer.Character.client:FindFirstChild("oxygen(peaks)")
  4956.         -- print("Oxygen Peaks Object:", oxygenPeaks)
  4957.         if isEnabled then
  4958.             if oxygenPeaks then
  4959.                 -- print("Connecting to Oxygen Peaks")
  4960.                 oxygenPeaks.Disabled = true
  4961.                 oxygenPeaksConnection = oxygenPeaks.Changed:Connect(function()
  4962.                     -- print("Oxygen Peaks Changed - Disabled:", oxygenPeaks.Disabled)
  4963.                     oxygenPeaks.Disabled = true
  4964.                 end)
  4965.             end
  4966.         else
  4967.             if oxygenPeaksConnection then
  4968.                 -- print("Disconnecting Oxygen Peaks connection")
  4969.                 oxygenPeaksConnection:Disconnect()
  4970.                 oxygenPeaks.Enabled = true
  4971.             end
  4972.         end
  4973.     end,
  4974. })
  4975.  
  4976. sections.Misc:AddToggle("AntiDrown", {
  4977.     Title = "Disable Temperature",
  4978.     Default = true,
  4979.     Description = "",
  4980.     Callback = function(isEnabled)
  4981.         local temperature = LocalPlayer.Character:FindFirstChild("client") and LocalPlayer.Character.client:FindFirstChild("temperature")
  4982.         -- print("Temperature Object:", temperature)
  4983.         if isEnabled then
  4984.             if temperature then
  4985.                 -- print("Connecting to Temperature")
  4986.                 temperature.Disabled = true
  4987.                 temperatureConnection = temperature.Changed:Connect(function()
  4988.                     -- print("Temperature Changed - Disabled:", temperature.Disabled)
  4989.                     temperature.Disabled = true
  4990.                 end)
  4991.             end
  4992.         else
  4993.             if temperatureConnection then
  4994.                 -- print("Disconnecting Temperature connection")
  4995.                 temperatureConnection:Disconnect()
  4996.                 temperature.Enabled = true
  4997.             end
  4998.         end
  4999.     end,
  5000. })
  5001.  
  5002.  
  5003.  
  5004.  
  5005. sections.Misc:AddParagraph({
  5006.     Title = gradient("Others"),
  5007. })
  5008. genv.PlatformColor = Color3.new(1.000000, 1.000000, 1.000000)
  5009. genv.PlatFormsize = 15
  5010. genv.Platform = nil
  5011. sections.Misc3:AddColorpicker("PlatformColor", {
  5012.     Title = "PlatForm Color",
  5013.     Default = Color3.new(1.000000, 1.000000, 1.000000),
  5014.     Callback = function(selectedColor)
  5015.             if genv.Platform ~= nil then
  5016.             genv.Platform.Color = selectedColor
  5017.         else
  5018.             genv.PlatformColor = selectedColor
  5019.         end
  5020.     end,
  5021. })
  5022.  
  5023. sections.Misc3:AddSlider("PlatFormSize", {
  5024.     Title = "Platform Size",
  5025.     Description = "",
  5026.     Default = 15,
  5027.     Min = 0,
  5028.     Max = 255,
  5029.     Increment = 1,
  5030.     Callback = function(value)
  5031.         if genv.Platform ~= nil then
  5032.             genv.Platform.Size = Vector3.new(value, 1, value)
  5033.         else
  5034.             genv.PlatFormsize = value
  5035.         end
  5036.     end,
  5037. })
  5038.  
  5039. sections.Misc3:AddToggle("JesusMode", {
  5040.     Title = "Portable Platform",
  5041.     Default = false,
  5042.     Description = "Recommended",
  5043.     Callback = function(isEnabled)
  5044.         genv.PortablePlatform = isEnabled
  5045.     if genv.PortablePlatform  then
  5046.     genv.Platform = Instance.new("Part")
  5047.     genv.Platform.Name = LocalPlayer.Name .. " PortablePlatform"
  5048.     genv.Platform.Size = Vector3.new(genv.PlatFormsize, 1, genv.PlatFormsize)
  5049.     genv.Platform.Anchored = true
  5050.     genv.Platform.CanCollide = true
  5051.     genv.Platform.Material = Enum.Material.Neon
  5052.     genv.Platform.Shape = Enum.PartType.Ball
  5053.     genv.Platform.CFrame = CFrame.new(0,0,0)
  5054.     genv.Platform.Parent = LocalPlayer.Character
  5055.     elseif genv.PortablePlatform == false then
  5056.         if genv.Platform ~= nil then
  5057.         genv.Platform:Destroy()
  5058.         genv.Platform = nil
  5059.         end
  5060.     end
  5061.  
  5062.     while genv.PortablePlatform do
  5063.  
  5064.                 -- Get the character's HumanoidRootPart
  5065.                 local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
  5066.  
  5067.                 -- Find the nearest terrain position that is water
  5068.                 local nearestWaterPosition = nil
  5069.                 local closestDistance = math.huge
  5070.                 local desiredOffset = 1 -- Distance offset from the player
  5071.  
  5072.                 -- Iterate over a smaller, more efficient grid
  5073.                 for x = -50, 50, 5 do
  5074.                     for z = -50, 50, 5 do
  5075.                         local checkPosition = humanoidRootPart.Position + Vector3.new(x, 0, z)
  5076.                         local rayOrigin = Vector3.new(checkPosition.X, humanoidRootPart.Position.Y + 50, checkPosition.Z)
  5077.                         local rayDirection = Vector3.new(0, -100, 0)
  5078.  
  5079.                         -- Perform raycasting
  5080.                         local raycastParams = RaycastParams.new()
  5081.                         raycastParams.FilterDescendantsInstances = {workspace.Terrain}
  5082.                         raycastParams.FilterType = Enum.RaycastFilterType.Whitelist
  5083.  
  5084.                         local rayResult = workspace:Raycast(rayOrigin, rayDirection, raycastParams)
  5085.                         if rayResult then
  5086.                             local hitPosition = rayResult.Position
  5087.                             local hitMaterial = rayResult.Material
  5088.  
  5089.                             -- Check if the material is water and ensure minimum offset
  5090.                             if hitMaterial == Enum.Material.Water then
  5091.                                 local distance = (humanoidRootPart.Position - hitPosition).Magnitude
  5092.                                 if distance < closestDistance and distance > desiredOffset then
  5093.                                     closestDistance = distance
  5094.                                     nearestWaterPosition = hitPosition
  5095.                                 end
  5096.                             end
  5097.                         end
  5098.                     end
  5099.                 end
  5100.  
  5101.                 -- Teleport the bobber to the nearest water position
  5102.                 if nearestWaterPosition then
  5103.                     local offsetDirection = (nearestWaterPosition - humanoidRootPart.Position).Unit
  5104.                     local finalPosition = nearestWaterPosition + offsetDirection * desiredOffset
  5105.  
  5106.                     genv.Platform.CFrame = CFrame.new(finalPosition)
  5107.                 end
  5108.  
  5109.                 task.wait() -- Adjust the wait time if necessary
  5110.             end
  5111.  
  5112.     end,
  5113. })
  5114.  
  5115.  
  5116. sections.Misc3:AddToggle("JesusMode", {
  5117.     Title = "Walk on water",
  5118.     Default = false,
  5119.     Description = "Old method",
  5120.     Callback = function(isEnabled)
  5121.         if isEnabled then
  5122.             for _, Ocean in pairs(game:GetService("Workspace").zones.fishing:GetDescendants()) do
  5123.                 if Ocean:IsA("Part") and Ocean.Name == "Ocean" then
  5124.                     Ocean.CanCollide = true
  5125.                 end
  5126.                 end
  5127.             for _, Ocean in pairs(game:GetService("Workspace").zones.fishing:GetDescendants()) do
  5128.                 if Ocean:IsA("Part") and Ocean.Name == "Deep Ocean" then
  5129.                     Ocean.CanCollide = true
  5130.                 end
  5131.                 end
  5132.         else
  5133.             for _, Ocean in pairs(game:GetService("Workspace").zones.fishing:GetDescendants()) do
  5134.                 if Ocean:IsA("Part") and Ocean.Name == "Ocean" then
  5135.                     Ocean.CanCollide = false
  5136.                 end
  5137.                 end
  5138.             for _, Ocean in pairs(game:GetService("Workspace").zones.fishing:GetDescendants()) do
  5139.                 if Ocean:IsA("Part") and Ocean.Name == "Deep Ocean" then
  5140.                     Ocean.CanCollide = false
  5141.                 end
  5142.                 end
  5143.         end
  5144.     end,
  5145. })
  5146.  
  5147.  
  5148. local PromptButtonHoldBegan = nil
  5149. genv.InstantPPToggle = sections.Misc:AddToggle("InstantProximityPrompt", {
  5150.     Title = "Instant Interact",
  5151.     Default = false,
  5152.     Description = "",
  5153.     Callback = function(isEnabled)
  5154.         if isEnabled then
  5155.             if fireproximityprompt then
  5156.                 PromptButtonHoldBegan = game:GetService("ProximityPromptService").PromptButtonHoldBegan:Connect(function(prompt)
  5157.                     fireproximityprompt(prompt)
  5158.                 end)
  5159.             else
  5160.                 lib:Notification('Incompatible Exploit', 'Your exploit does not support this feature (missing fireproximityprompt)')
  5161.                 genv.InstantPPToggle:Set(false)
  5162.             end
  5163.         else
  5164.             if PromptButtonHoldBegan ~= nil then
  5165.                 PromptButtonHoldBegan:Disconnect()
  5166.                 PromptButtonHoldBegan = nil
  5167.             end
  5168.         end
  5169.     end,
  5170. })
  5171.  
  5172. sections.Misc:AddToggle("TitleLoop", {
  5173.     Title = "Loop Through Titles",
  5174.     Default = false,
  5175.     Description = "Others can see this, this is just for fun.",
  5176.     Callback = function(isEnabled)
  5177.         genv.TitleLoop = isEnabled
  5178.         local titleStats = ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.title
  5179.        
  5180.         if titleStats then
  5181.             while genv.TitleLoop do
  5182.                 for _, child in ipairs(titleStats:GetChildren()) do
  5183.                     services.ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RE/Titles/Equip"):FireServer(child.Name)
  5184.                     -- print("Fired server with argument:", child.Name)
  5185.                     task.wait(0.05)
  5186.                     if not genv.TitleLoop then break end
  5187.                 end
  5188.             end
  5189.         end
  5190.     end,
  5191. })
  5192.  
  5193.  
  5194. sections.Misc:AddToggle("RodLoop", {
  5195.     Title = "Loop Through Rods",
  5196.     Default = false,
  5197.     Description = "Others can see this, this is just for fun.",
  5198.     Callback = function(isEnabled)
  5199.         genv.RodLoop = isEnabled
  5200.         local rods = ReplicatedStorage:WaitForChild("playerstats"):WaitForChild(LocalPlayer.Name).Rods
  5201.  
  5202.         if rods then
  5203.             while genv.RodLoop do
  5204.                 for _, child in ipairs(rods:GetChildren()) do
  5205.                     services.ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RE/Rod/Equip"):FireServer(child.Name)
  5206.  
  5207.                     -- print("Fired equiprod event with argument:", child.Name)
  5208.                     task.wait(0.05)
  5209.                     if not genv.RodLoop then break end
  5210.                 end
  5211.             end
  5212.         end
  5213.     end,
  5214. })
  5215.  
  5216. local Emotes = {}
  5217.  
  5218. for _,v in pairs(services.ReplicatedStorage.resources.animations.emotes:GetChildren()) do
  5219.     if v:IsA("Animation") then
  5220.         table.insert(Emotes, v.name)
  5221.     end
  5222. end
  5223.  
  5224. local OldAnimation
  5225.     function playEmote(name)
  5226.     if OldAnimation then OldAnimation:Stop() end
  5227.     OldAnimation = services.Players.LocalPlayer.Character.Humanoid:LoadAnimation(services.ReplicatedStorage.resources.animations.emotes[name])
  5228.     OldAnimation:Play()
  5229.     end
  5230.  
  5231. sections.Misc:AddDropdown("", {
  5232.     Title = "Emotes",
  5233.     Description = "Your able to play the animations (FE)",
  5234.     Options = Emotes,
  5235.     Default = "",
  5236.     Multiple = false,
  5237.     Callback = function(SelectedEmote)
  5238.         playEmote(SelectedEmote)
  5239.     end
  5240. })
  5241.  
  5242. sections.Misc:AddButton({
  5243.     Title = "Stop Emoting",
  5244.     Variant = "Primary",
  5245.     Callback = function()
  5246.        if OldAnimation then OldAnimation:Stop() end
  5247.     end,
  5248. })
  5249.  
  5250. sections.Misc:AddSlider("TiderBreaker", {
  5251.     Title = "Tidebreaker Speed",
  5252.     Description = "",
  5253.     Default = 6500,
  5254.     Min = 0,
  5255.     Max = 50000,
  5256.     Increment = 1,
  5257.     Callback = function(value)
  5258.         if character:FindFirstChild("Tidebreaker") then
  5259.             character:FindFirstChild("Tidebreaker"):WaitForChild("Core"):WaitForChild("VectorForce").Force = Vector3.new(value,0,0)
  5260.         elseif services.Players.LocalPlayer.Backpack:FindFirstChild("Tidebreaker") then
  5261.             services.Players.LocalPlayer.Backpack:FindFirstChild("Tidebreaker"):WaitForChild("Core"):WaitForChild("VectorForce").Force = Vector3.new(value,0,0)
  5262.         else
  5263.         lib:Notification("Error", "it seems like you don't own a tidebreaker", 5)
  5264.         end
  5265.     end,
  5266. })
  5267. genv.UHHHHHHWTF = false
  5268. sections.Misc:AddToggle("TideBreaker2", {
  5269.     Title = "Make TideBreaker Easier to Control",
  5270.     Default = false,
  5271.     Description = "",
  5272.     Callback = function(isEnabled)
  5273.     genv.UHHHHHHWTF = isEnabled
  5274.     if genv.UHHHHHHWTF then
  5275.         if character:FindFirstChild("Tidebreaker") then
  5276.             character:FindFirstChild("Tidebreaker"):WaitForChild("Core"):WaitForChild("VectorForce").ApplyAtCenterOfMass = genv.UHHHHHHWTF
  5277.         elseif services.Players.LocalPlayer.Backpack:FindFirstChild("Tidebreaker") then
  5278.             services.Players.LocalPlayer.Backpack:FindFirstChild("Tidebreaker"):WaitForChild("Core"):WaitForChild("VectorForce").ApplyAtCenterOfMass = genv.UHHHHHHWTF
  5279.         else
  5280.         lib:Notification("Error", "it seems like you don't own a tidebreaker", 5)
  5281.         end
  5282.     end
  5283.     end,
  5284. })
  5285.  
  5286. local randomMiscButton = sections.Misc:AddGroupButton()
  5287.  
  5288. -- randomMiscButton:AddButton({
  5289. --     Title = "Refresh Dropdown",
  5290. --     Variant = "Outline",
  5291. --     Callback = function()
  5292. --         UpdatePlayerList()
  5293. --     end,
  5294. -- })
  5295.  
  5296.  
  5297. randomMiscButton:AddButton({
  5298.     Title = "Remove AFK Permanently",
  5299.     Variant = "Primary",
  5300.     Callback = function()
  5301.        ReplicatedStorage.events.afk:Destroy()
  5302.     end,
  5303. })
  5304.  
  5305.  
  5306. randomMiscButton:AddButton({
  5307.     Title = "Redeem All Codes",
  5308.     Variant = "Primary",
  5309.     Callback = function()
  5310.         if type(data.Codes) == "table" then
  5311.             for codeName in pairs(data.Codes) do
  5312.                 ReplicatedStorage:WaitForChild("events"):WaitForChild("runcode"):FireServer(codeName)      
  5313.             end
  5314.         end
  5315.     end,
  5316. })
  5317.  
  5318. randomMiscButton:AddButton({
  5319.     Title = "Die",
  5320.     Variant = "Primary",
  5321.     Callback = function()
  5322.         ReplicatedStorage:WaitForChild("events"):WaitForChild("drown"):FireServer(0)    
  5323.     end,
  5324. })
  5325.  
  5326. groupId = 7381705
  5327.  
  5328. -- Function to fetch roles in the group
  5329. local function fetchGroupRoles(groupId)
  5330.     local response = request({
  5331.         Url = string.format("https://groups.roblox.com/v1/groups/%d/roles", groupId),
  5332.         Method = "GET",
  5333.         Headers = { ["Content-Type"] = "application/json" }
  5334.     })
  5335.  
  5336.     if response and response.Success then
  5337.         return HttpService:JSONDecode(response.Body)
  5338.     else
  5339.         warn("Failed to fetch group roles:", response.StatusCode, response.StatusMessage)
  5340.         return nil
  5341.     end
  5342. end
  5343.  
  5344. local rolesList = {}
  5345.  
  5346. local rolesData = fetchGroupRoles(groupId)
  5347. if rolesData and rolesData.roles then
  5348.     for _, role in ipairs(rolesData.roles) do
  5349.         table.insert(rolesList, role.name)
  5350.     end
  5351. end
  5352.  
  5353. genv.AntiStaffDropDown = sections.Misc1:AddDropdown("AntiStaffList", {
  5354.     Title = "Select Roles",
  5355.     Description = "",
  5356.     Options = rolesList,
  5357.     Default = "",
  5358.     Multiple = true,
  5359.     Callback = function(selectedRoles)
  5360.         genv.SelectedRoles = selectedRoles
  5361.         -- print("Selected Roles:")
  5362.         for _, role in ipairs(genv.SelectedRoles) do
  5363.             -- print(role)
  5364.         end
  5365.     end
  5366. })
  5367.  
  5368. -- role ~= "Fischer" and
  5369. -- ^ add this too but removed for now for testing purposes
  5370. genv.FinishedChecked = false
  5371. if genv.FinishedChecked == false then
  5372. genv.AntiStaffDropDown:Refresh(rolesList,true)
  5373. for _, role in ipairs(rolesList) do
  5374.     if role ~= "Guest" and role ~= "Fischer" then
  5375.         genv.AntiStaffDropDown:Set(role)
  5376.     end
  5377. end
  5378. genv.FinishedChecked = true
  5379. end
  5380.  
  5381. local RolewatchConnection
  5382.  
  5383. genv.AntiStaffToggle = sections.Misc1:AddToggle("AntiStaff", {
  5384.     Title = "Anti Staff",
  5385.     Default = true,
  5386.     Description = "Leaves the game automatically if a staff joins",
  5387.     Callback = function(isEnabled)
  5388.         if isEnabled then
  5389.             RolewatchConnection = Players.PlayerAdded:Connect(function(player)
  5390.                 if player:IsInGroup(groupId) then
  5391.                     local playerRole = tostring(player:GetRoleInGroup(groupId)):lower()
  5392.  
  5393.                     -- Ensure SelectedRoles is valid before iterating
  5394.                     if type(genv.SelectedRoles) == "table" then
  5395.                         for _, selectedRole in ipairs(genv.SelectedRoles) do
  5396.                             if playerRole == selectedRole:lower() then
  5397.                                 LocalPlayer:Kick(".")
  5398.                                 _G.UIStroke = Instance.new("UIStroke", game:GetService("CoreGui").RobloxPromptGui:WaitForChild("promptOverlay"):FindFirstChild("ErrorPrompt"))
  5399.                                 _G.UIStroke.Color = Color3.new(0.231373, 0.231373, 0.231373)
  5400.                                 _G.UIStroke.Transparency = 0.6
  5401.                                 _G.UICorner = Instance.new("UICorner", game:GetService("CoreGui").RobloxPromptGui:WaitForChild("promptOverlay"):FindFirstChild("ErrorPrompt"))
  5402.                                 _G.UICorner.CornerRadius = UDim.new(0, 5)
  5403.                                 game:GetService("CoreGui").RobloxPromptGui:WaitForChild("promptOverlay"):FindFirstChild("ErrorPrompt").BackgroundColor3 = Color3.new(0.078431, 0.078431, 0.078431)
  5404.                                 game:GetService("CoreGui").RobloxPromptGui:WaitForChild("promptOverlay"):FindFirstChild("ErrorPrompt").Size = UDim2.new(0, 400, 0, 330)
  5405.                                 game:GetService("CoreGui").RobloxPromptGui:WaitForChild("promptOverlay"):FindFirstChild("ErrorPrompt").MessageArea.ErrorFrame.ErrorMessage.RichText = true
  5406.                                 game:GetService("CoreGui").RobloxPromptGui:WaitForChild("promptOverlay"):FindFirstChild("ErrorPrompt").TitleFrame.ErrorTitle.RichText = true
  5407.                                 game:GetService("CoreGui").RobloxPromptGui:WaitForChild("promptOverlay"):FindFirstChild("ErrorPrompt").TitleFrame.ErrorTitle.Text = [[<font color="#5359bf">L</font><font color="#4c4eb9">u</font><font color="#4644b3">n</font><font color="#403aad">o</font><font color="#3a30a8">r</font>]]
  5408.                                 game:GetService("CoreGui").RobloxPromptGui:WaitForChild("promptOverlay"):FindFirstChild("ErrorPrompt").MessageArea.ErrorFrame.ErrorMessage.Text = [[
  5409. <b><font color="#5359bf">L</font><font color="#4c4eb9">u</font><font color="#4644b3">n</font><font color="#403aad">o</font><font color="#3a30a8">r</font></b> has detected a Staff and has Initiated Self-Kick on your profile.
  5410.  
  5411. Username: <font color="rgb(255,255,255)">]] .. player.Name .. [[</font>  
  5412. Role: <font color="rgb(255,255,255)">]] .. selectedRole .. [[</font>.
  5413. Action Was Taken at : <font color="rgb(255,255,255)">]] .. os.date("%I:%M %p") .. [[</font>
  5414.  
  5415. <font color="rgb(255,255,0)">⚠️ Please be careful, actions like this may result in further consequences.</font>
  5416. ]]
  5417.                                 break
  5418.                             end
  5419.                         end
  5420.                     else
  5421.                         warn("SelectedRoles is not a table or is nil.")
  5422.                     end
  5423.                 end
  5424.             end)
  5425.             lib:Notification("Anti Staff", "Anti Staff has automatically been enabled.", 5)
  5426.         else
  5427.             if RolewatchConnection then
  5428.                 RolewatchConnection:Disconnect()
  5429.                 RolewatchConnection = nil
  5430.             end
  5431.         end
  5432.     end
  5433. })
  5434.  
  5435.  
  5436.  
  5437. genv.InventoryValueGift = sections.Misc2:AddParagraph({
  5438.     Title = gradient("Inventory Information"),
  5439.     Description = "Inventory Info: <font color=\"rgb(255,0,0)\">Offline</font>\nInventory Value: <font color=\"rgb(255,0,0)\">Offline</font>\nHeld Item Value: <font color=\"rgb(255,0,0)\">Offline</font>"
  5440. })
  5441.  
  5442. function UpdatePlayerList()
  5443.     variables.PlayerList = {}
  5444.     for _, v in pairs(Players:GetPlayers()) do
  5445.         table.insert(variables.PlayerList, v.DisplayName .. " (@"..v.Name..") ")
  5446.     end
  5447.     genv.UserDropDown:Refresh(variables.PlayerList, true)
  5448.     genv.UserDropDown:Set(variables.CopyuserSelect)
  5449. end
  5450.  
  5451.  
  5452. genv.UserDropDown = sections.Misc2:AddDropdown("AllUsers", {
  5453.     Title = "Select User",
  5454.     Description = "",
  5455.     PlaceHolder = "Search Player",
  5456.     Options = variables.PlayerList,
  5457.     Default = "",
  5458.     Multiple = false,
  5459.     Callback = function(selectedPlayer)
  5460.         local realName = selectedPlayer:match("%(@(.-)%)")
  5461.         genv.SelectedPlayer = realName
  5462.         print(genv.SelectedPlayer)
  5463.     end
  5464. })
  5465.  
  5466. UpdatePlayerList()
  5467.  
  5468. local giftGroupButton = sections.Misc2:AddGroupButton()
  5469.  
  5470. giftGroupButton:AddButton({
  5471.     Title = "Refresh Dropdown",
  5472.     Variant = "Outline",
  5473.     Callback = function()
  5474.         UpdatePlayerList()
  5475.     end,
  5476. })
  5477.  
  5478. giftGroupButton:AddButton({
  5479.     Title = "Gift Hand",
  5480.     Variant = "Primary",
  5481.     Callback = function()
  5482.         local check = validToolCheck()
  5483.         if check then
  5484.             local fish = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  5485.            
  5486.             gift(genv.SelectedPlayer, fish.Name)        
  5487.         else
  5488.             lib:Notification("Gift Hand", "You don't seem to have a valid fish equipped3..", 5)
  5489.         end
  5490.     end,
  5491. })
  5492.  
  5493. giftGroupButton:AddButton({
  5494.     Title = "Gift All",
  5495.     Variant = "Primary",
  5496.     Callback = function()
  5497.         giftAll()
  5498.     end,
  5499. })
  5500.  
  5501. sections.Misc2:AddToggle("ExcludeFav", {
  5502.     Title = "Exclude Favourites",
  5503.     Default = true,
  5504.     Description = "",
  5505.     Callback = function(isEnabled)
  5506.         genv.ExcludeFavourite = isEnabled
  5507.     end,
  5508. })
  5509.  
  5510.  
  5511. genv.GiftHandToggle = sections.Misc2:AddToggle("LoopGiftHand", {
  5512.     Title = "Loop Gift Hand",
  5513.     Default = false,
  5514.     Description = "",
  5515.     Callback = function(isEnabled)
  5516.         genv.GiftHand = isEnabled
  5517.         while genv.GiftHand do
  5518.  
  5519.             local check = validToolCheck()
  5520.             if check then
  5521.                 local fish = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  5522.                 gift(genv.SelectedPlayer, fish.Name)
  5523.             else
  5524.                 lib:Notification("Gift Hand", "You don't seem to have a valid fish equipped2..", 5)
  5525.                 genv.GiftHandToggle:Set(false)
  5526.             end
  5527.             task.wait()
  5528.         end
  5529.     end,
  5530. })
  5531.  
  5532. sections.Misc2:AddToggle("LoopAccept", {
  5533.     Title = "Loop Accept",
  5534.     Default = false,
  5535.     Description = "",
  5536.     Callback = function(isEnabled)
  5537.         genv.Accept = isEnabled
  5538.         local function processOffers()
  5539.             for _, frame in pairs(LocalPlayer.PlayerGui.hud.safezone.bodyannouncements:GetChildren()) do
  5540.                 if frame:IsA("Frame") and frame.Name == "offer" then
  5541.                     local confirmButton = frame:FindFirstChild("confirm")
  5542.                     if confirmButton and confirmButton:IsA("TextButton") then
  5543.                         if getconnections then
  5544.                             for i, v in pairs(getconnections(confirmButton.MouseButton1Click)) do
  5545.                                 v.Function()
  5546.                             end
  5547.                         else
  5548.                             firesignal(confirmButton.MouseButton1Click)
  5549.                         end
  5550.                     end                    
  5551.                 end
  5552.             end
  5553.         end
  5554.        
  5555.         while genv.Accept do
  5556.             if #LocalPlayer.PlayerGui.hud.safezone.bodyannouncements:GetChildren() > 0 then
  5557.                 processOffers()
  5558.             end
  5559.             task.wait(0.1)
  5560.         end
  5561.        
  5562.     end,
  5563. })
  5564.  
  5565. sections.Misc2:AddToggle("LoopGiftInv", {
  5566.     Title = "Loop Gift Inventory",
  5567.     Default = false,
  5568.     Description = "",
  5569.     Callback = function(isEnabled)
  5570.         genv.GiftInventory = isEnabled
  5571.         if genv.GiftInventory then
  5572.             LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  5573.         end
  5574.         while genv.GiftInventory do
  5575.             giftAll()
  5576.             wait(1)
  5577.             if not genv.GiftInventory then
  5578.                 LocalPlayer.Character:FindFirstChildOfClass("Humanoid"):UnequipTools()
  5579.                 break
  5580.             end
  5581.         end
  5582.     end,
  5583. })
  5584.  
  5585.  
  5586. genv.GiftInformationParagraph = sections.Misc2:AddParagraph({
  5587.     Title = gradient("Information"),
  5588.     Description = '<b>Once the amount is reached, the toggle will automatically turn off and stopped.</b>\nGift Amount: <font color="#FF0000">Offline</font>\nGift Value (Inv): <font color="#FF0000">Offline</font>\nGift Value (Hand): <font color="#FF0000">Offline</font>'})
  5589.  
  5590.    
  5591.  
  5592. sections.Misc2:AddTextbox({
  5593.     Title = "Gift: Amount",
  5594.     Default = "",
  5595.     Description = "Amount of your held item that'll be give..",
  5596.     PlaceHolder = "Ex: 5",
  5597.     TextDisappear = false,
  5598.     Callback = function(giftAmount)
  5599.         genv.giftAmount = tonumber(giftAmount)
  5600.     end
  5601. })
  5602.  
  5603. -- genv.LoopGiftAmountToggle = sections.Misc2:AddToggle("LoopGiftAmount", {
  5604. --     Title = "Loop Gift Amount",
  5605. --     Default = false,
  5606. --     Description = "",
  5607. --     Callback = function(isEnabled)
  5608. --         genv.LoopGiftAmount = isEnabled
  5609. --         local check = validToolCheck()
  5610. --         if check then
  5611. --             local fish = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  5612. --             local link = tostring(fish.link.Value)
  5613. --             print(link)
  5614. --             local amount = tonumber(ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[link].Stack.Value)
  5615. --             print(amount)
  5616. --             print(genv.giftAmount)
  5617. --             if amount < tonumber(genv.giftAmount) then
  5618. --                 lib:Notification("Loop Gift Amount", "You have less of this fish than your desired gifting amount..", 5)
  5619. --                 genv.LoopGiftAmountToggle:Set(false)
  5620. --             else
  5621. --                 local targetAmount = amount - genv.giftAmount
  5622.                
  5623. --                 while genv.LoopGiftAmount do
  5624. --                     amount = ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[link].Stack
  5625.            
  5626. --                     if amount > tonumber(targetAmount) then
  5627. --                         gift(genv.selectedPlayer, fish.Name)
  5628. --                         task.wait(0.1)
  5629. --                     else
  5630. --                         lib:Notification("Loop Gift Amount", "Completed.", 5)
  5631. --                         genv.LoopGiftAmountToggle:Set(false)
  5632. --                         genv.GiftInformationParagraph:SetDesc('<b>Once the amount is reached, the toggle will automatically turn off and stopped.</b>\nGift Amount: <font color="#00FF00">Completed</font>\nGift Value (Inv): <font color="#FF0000">Offline</font>\nGift Value (Hand): <font color="#00FF00">Completed</font>')
  5633. --                         break
  5634. --                     end
  5635. --                 end
  5636. --             end
  5637. --         else
  5638. --             lib:Notification("Gift Hand", "You don't seem to have a valid fish equipped..", 5)
  5639. --         end
  5640. --     end,
  5641. -- })
  5642.  
  5643.  
  5644. genv.LoopGiftAmountToggle = sections.Misc2:AddToggle("LoopGiftAmount", {
  5645.     Title = "Loop Gift Amount",
  5646.     Default = false,
  5647.     Description = "",
  5648.     Callback = function(isEnabled)
  5649.         genv.LoopGiftAmount = isEnabled
  5650.  
  5651.         if not isEnabled then
  5652.             return
  5653.         end
  5654.  
  5655.         local check = validToolCheck()
  5656.         if check then
  5657.             local fish = tostring(game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool").link.Value)
  5658.             local stack = tonumber(ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[fish].Stack.Value)
  5659.             if ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[fish] then
  5660.                 print(stack)
  5661.                 print(tonumber(genv.giftAmount))
  5662.                 if tonumber(ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[fish].Stack.Value) < tonumber(genv.giftAmount) then
  5663.                     print(stack, genv.giftAmount, "lol")
  5664.                     genv.LoopGiftAmountToggle:Set(false)
  5665.                     lib:Notification("Loop Gift Amount", "You have less of this fish than your desired gifting amount..", 5)
  5666.                     return
  5667.                 else
  5668.                     local realFish = tostring(game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool"))
  5669.                     local startingValue = tonumber(stack) -- 10
  5670.                     print(startingValue)
  5671.                     local amountToGift = startingValue - genv.giftAmount -- (gA = 4) = 6
  5672.                     print(startingValue, genv.giftAmount ..  " = " .. amountToGift)
  5673.                     while genv.LoopGiftAmount do
  5674.                         local stack = tonumber(ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[fish].Stack.Value)
  5675.                         print(tonumber(stack) .. " " .. amountToGift)
  5676.                         if tonumber(stack) > amountToGift then
  5677.                             print("supposed to gift..")
  5678.                             local targetItem = ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[fish]
  5679.                             local previousValue = targetItem.Stack.Value
  5680.                             gift(genv.SelectedPlayer, realFish)
  5681.                             while targetItem.Stack.Value == previousValue do
  5682.                                 task.wait()
  5683.                             end
  5684.                             local fishValue = tonumber(stack) or 0
  5685.                             local giftValue = tonumber(amountToGift) or 0
  5686.  
  5687.                             local formattedFishValue = formatNumber(fishValue)
  5688.                             local formattedGiftValue = formatNumber(giftValue)
  5689.  
  5690.                             local updatedDesc = string.format(
  5691.                                 '<b>Once the amount is reached, the toggle will automatically turn off and stopped.</b>\nGift Amount: <font color="#FFFF00">%s -> %s</font>\nGift Value (Inv): <font color="#FF0000">Offline</font>\nGift Value (Hand): <font color="#FF0000">Offline</font>',
  5692.                                 formattedFishValue,
  5693.                                 formattedGiftValue
  5694.                             )
  5695.  
  5696.                             genv.GiftInformationParagraph:SetDesc(updatedDesc)
  5697.                         else
  5698.                             genv.LoopGiftAmountToggle:Set(false)
  5699.                             lib:Notification("Loop Gift Amount", "Completed.", 5)
  5700.                             genv.GiftInformationParagraph:SetDesc('<b>Once the amount is reached, the toggle will automatically turn off and stopped.</b>\nGift Amount: <font color="#00FF00">Completed</font>\nGift Value (Inv): <font color="#FF0000">Offline</font>\nGift Value (Hand): <font color="#FF0000">Offline</font>')
  5701.                             return
  5702.                         end
  5703.                         task.wait(3)
  5704.                     end
  5705.                 end
  5706.             end
  5707.         end
  5708.     end,
  5709. })
  5710.  
  5711.  
  5712.  
  5713.  
  5714. sections.Misc2:AddTextbox({
  5715.     Title = "Gift: Value",
  5716.     Default = "",
  5717.     Description = "",
  5718.     PlaceHolder = "Ex: 1000000",
  5719.     TextDisappear = false,
  5720.     Callback = function(giftValue)
  5721.         genv.giftValue = giftValue
  5722.     end
  5723. })
  5724.  
  5725. genv.ToggleGiftInvValue = sections.Misc2:AddToggle("ToggleGiftInv", {
  5726.     Title = "Gift Value: Inventory [ procrastinating on this.. ]",
  5727.     Default = false,
  5728.     Description = "",
  5729.     Callback = function(isEnabled)
  5730.         genv.AutoGiftInvValue = isEnabled
  5731.         -- if _G.totalValue < genv.giftValue then
  5732.         --     lib:Notification("Gift Value: Inventory", "You don't have enough value to gift..", 5)
  5733.         --     genv.ToggleGiftInv:Set(false)
  5734.         -- else
  5735.         --     print("hi")
  5736.         -- end
  5737.     end,
  5738. })
  5739.  
  5740.  
  5741. genv.ToggleGiftHandValue = sections.Misc2:AddToggle("LoopGiftHand", {
  5742.     Title = "Gift Value: Hand",
  5743.     Default = false,
  5744.     Description = "",
  5745.     Callback = function(isEnabled)
  5746.         genv.AutoGiftHandValue = isEnabled
  5747.  
  5748.         if not isEnabled then
  5749.             return
  5750.         end
  5751.  
  5752.         local check = validToolCheck()
  5753.         if check then
  5754.             local fish = tostring(game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool").link.Value)
  5755.             if ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[fish] then                
  5756.                 if tonumber(GetBackPackItemValue(fish)) < tonumber(genv.giftValue) then
  5757.                     print(GetBackPackItemValue(fish), genv.giftValue, "lol")
  5758.                     genv.ToggleGiftHandValue:Set(false)
  5759.                     lib:Notification("Gift Value: Hand", "You don't have enough value to gift..", 5)
  5760.                     return
  5761.                 else
  5762.                     local realFish = tostring(game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool"))
  5763.                     local startingValue = tonumber(GetBackPackItemValue(fish)) -- 10m
  5764.                     print(startingValue)
  5765.                     local valueToGift = startingValue - genv.giftValue -- 6m
  5766.  
  5767.                     while genv.AutoGiftHandValue do
  5768.                         print("here")
  5769.                         if tonumber(GetBackPackItemValue(fish)) > valueToGift then
  5770.                             print('here1')
  5771.                             local targetItem = ReplicatedStorage.playerstats[LocalPlayer.Name].Inventory[fish]
  5772.                             local previousValue = targetItem.Stack.Value
  5773.                             print('here??')
  5774.                             print(fish)
  5775.                             print(genv.SelectedPlayer)
  5776.                             gift(genv.SelectedPlayer, realFish)
  5777.                             while targetItem.Stack.Value == previousValue do
  5778.                                 task.wait()
  5779.                             end
  5780.                             local fishValue = tonumber(GetBackPackItemValue(fish)) or 0
  5781.                             local giftValue = tonumber(valueToGift) or 0
  5782.  
  5783.                             local formattedFishValue = formatNumber(fishValue)
  5784.                             local formattedGiftValue = formatNumber(giftValue)
  5785.  
  5786.                             local updatedDesc = string.format(
  5787.                                 '<b>Once the amount is reached, the toggle will automatically turn off and stopped.</b>\nGift Amount: <font color="#FF0000">Offline</font>\nGift Value (Inv): <font color="#FF0000">Offline</font>\nGift Value (Hand): <font color="#FFFF00">%s -> %s</font>',
  5788.                                 formattedFishValue,
  5789.                                 formattedGiftValue
  5790.                             )
  5791.  
  5792.                             genv.GiftInformationParagraph:SetDesc(updatedDesc)
  5793.                         else
  5794.                             genv.ToggleGiftHandValue:Set(false)
  5795.                             lib:Notification("Gift Value: Hand", "Completed.", 5)
  5796.                             genv.GiftInformationParagraph:SetDesc('<b>Once the amount is reached, the toggle will automatically turn off and stopped.</b>\nGift Amount: <font color="#FF0000">Offline</font>\nGift Value (Inv): <font color="#FF0000">Offline</font>\nGift Value (Hand): <font color="#00FF00">Completed</font>')
  5797.                             return
  5798.                         end
  5799.                         task.wait(3)
  5800.                     end
  5801.                 end
  5802.             end
  5803.         end
  5804.     end,
  5805. })
  5806.  
  5807.  
  5808.  
  5809. -- genv.GiftHand = isEnabled
  5810. -- while genv.GiftHand do
  5811.  
  5812. --     local check = validToolCheck()
  5813. --     if check then
  5814. --         local fish = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  5815. --         gift(genv.SelectedPlayer, fish.Name)
  5816. --     else
  5817. --         lib:Notification("Gift Hand", "You don't seem to have a valid fish equipped2..", 5)
  5818. --         genv.GiftHandToggle:Set(false)
  5819. --     end
  5820. --     task.wait()
  5821. -- end
  5822.  
  5823. sections.Visuals:AddToggle("AutoRadarMode", {
  5824.     Title = "Enable Fish Radar",
  5825.     Default = false,
  5826.     Description = "",
  5827.     Callback = function(isEnabled)
  5828.         variables.AutoToggleRadar = true
  5829.         if isEnabled then
  5830.                 for _, descendant in ipairs(workspace.zones.fishing:GetDescendants()) do
  5831.                     if descendant.Name == "radar1" or descendant.Name == "radar2" then
  5832.                         descendant.Enabled = true
  5833.                         descendant.MaxDistance = math.huge
  5834.                     end
  5835.                 end
  5836.         else
  5837.             variables.AutoToggleRadar = false
  5838.             for _, descendant in ipairs(workspace.zones.fishing:GetDescendants()) do
  5839.                 if descendant.Name == "radar1" or descendant.Name == "radar2" then
  5840.                     descendant.Enabled = false
  5841.                     descendant.MaxDistance = 250
  5842.                 end
  5843.             end
  5844.         end
  5845.     end,
  5846. })
  5847.  
  5848.  
  5849. sections.Visuals:AddToggle("Inventory Value", {
  5850.     Title = "Calculate Each Item Value",
  5851.     Default = false,
  5852.     Description = "Displays a text showing the value of items",
  5853.     Callback = function(isEnabled)
  5854.         genv.AutoPriceCheck = isEnabled
  5855.        
  5856.         if isEnabled then
  5857.             for _, v in pairs(LocalPlayer.PlayerGui.hud.safezone.backpack:GetDescendants()) do
  5858.                 if v:IsA("ValueBase") and v.Name == "item" then
  5859.                     local itemValue = GetBackPackItemValue(v.Value)
  5860.                     if itemValue then
  5861.                         CreatePrice(v.Parent, itemValue)
  5862.                     end
  5863.                 end
  5864.             end
  5865.  
  5866.  
  5867.             task.spawn(function()
  5868.                 while genv.AutoPriceCheck do
  5869.                     if not _G.running then
  5870.                         _G.running = true
  5871.                         monitorBackpack()
  5872.                     end
  5873.                    
  5874.                     task.wait(1)
  5875.                 end
  5876.  
  5877.                 if not genv.AutoPriceCheck and _G.running then
  5878.                     _G.running = false
  5879.  
  5880.                     if _G.connections then
  5881.                         for _, connection in ipairs(_G.connections) do
  5882.                             if connection.Connected then
  5883.                                 connection:Disconnect()
  5884.                             end
  5885.                         end
  5886.                         _G.connections = {}
  5887.                     end
  5888.  
  5889.                     clearPriceLabels()
  5890.                 end
  5891.             end)
  5892.         else
  5893.  
  5894.             genv.AutoPriceCheck = false
  5895.         end
  5896.     end,
  5897. })
  5898.  
  5899.  
  5900. sections.Visuals:AddToggle("AutoFullBright", {
  5901.     Title = "Enable FullBright",
  5902.     Default = false,
  5903.     Description = "",
  5904.     Callback = function(isEnabled)
  5905.         genv.FullBright = isEnabled
  5906.         if genv.FullBright then
  5907.             brightLoop = RunService.RenderStepped:Connect(brightFunc)
  5908.         elseif not genv.FullBright then
  5909.             if brightLoop then
  5910.                 brightLoop:Disconnect()
  5911.             end
  5912.         end
  5913.     end,
  5914. })
  5915.  
  5916.  
  5917.  
  5918. local createdVisual = false
  5919. local LureVisualUI = {}
  5920. local updateConnection
  5921.  
  5922. sections.Visuals:AddToggle("LureVisual", {
  5923.     Title = "Lure Visual",
  5924.     Default = false,
  5925.     Description = "",
  5926.     Callback = function(isEnabled)
  5927.         genv.LureVisual = isEnabled
  5928.  
  5929.         local function createLureVisual()
  5930.             createdVisual = true
  5931.  
  5932.             LureVisualUI["1"] = Instance.new("ScreenGui", gethui())
  5933.             LureVisualUI["1"]["Name"] = [[LureVisual]]
  5934.  
  5935.             LureVisualUI["2"] = Instance.new("Frame", LureVisualUI["1"])
  5936.             LureVisualUI["2"]["BorderSizePixel"] = 0
  5937.             LureVisualUI["2"]["BackgroundColor3"] = Color3.fromRGB(21, 21, 21)
  5938.             LureVisualUI["2"]["Size"] = UDim2.new(0, 0, 0, 0) -- Start small for animation
  5939.             LureVisualUI["2"]["Position"] = UDim2.new(0.457, 0, 0.87, 0)
  5940.             LureVisualUI["2"]["BorderColor3"] = Color3.fromRGB(0, 0, 0)
  5941.             LureVisualUI["2"]["Name"] = [[CoolMonke]]
  5942.             LureVisualUI["2"]["BackgroundTransparency"] = 1 -- Fully transparent at start
  5943.  
  5944.             -- Add UICorner for rounded edges
  5945.             LureVisualUI["3"] = Instance.new("UICorner", LureVisualUI["2"])
  5946.  
  5947.             -- Add UIStroke for border
  5948.             LureVisualUI["4"] = Instance.new("UIStroke", LureVisualUI["2"])
  5949.             LureVisualUI["4"]["Thickness"] = 0.6
  5950.             LureVisualUI["4"]["Color"] = Color3.fromRGB(255, 255, 255)
  5951.  
  5952.             -- Add TextLabel for Lure percentage
  5953.             LureVisualUI["5"] = Instance.new("TextLabel", LureVisualUI["2"])
  5954.             LureVisualUI["5"]["BorderSizePixel"] = 0
  5955.             LureVisualUI["5"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255)
  5956.             LureVisualUI["5"]["TextSize"] = 24
  5957.             LureVisualUI["5"]["FontFace"] = Font.new([[rbxasset://fonts/families/SourceSansPro.json]], Enum.FontWeight.Bold, Enum.FontStyle.Normal)
  5958.             LureVisualUI["5"]["TextColor3"] = Color3.fromRGB(255, 255, 255)
  5959.             LureVisualUI["5"]["BackgroundTransparency"] = 1
  5960.             LureVisualUI["5"]["RichText"] = true
  5961.             LureVisualUI["5"]["Size"] = UDim2.new(1, 0, 1, 0)
  5962.             LureVisualUI["5"]["Text"] = [[Lure: 0%]]
  5963.  
  5964.             -- Add progress bar at the bottom
  5965.             LureVisualUI["7"] = Instance.new("Frame", LureVisualUI["2"])
  5966.             LureVisualUI["7"]["BorderSizePixel"] = 0
  5967.             LureVisualUI["7"]["BackgroundColor3"] = Color3.fromRGB(255, 255, 255)
  5968.             LureVisualUI["7"]["Size"] = UDim2.new(0, 170, 0, 7)
  5969.             LureVisualUI["7"]["Position"] = UDim2.new(-0.00595, 0, 0.87, 0)
  5970.             LureVisualUI["7"]["BorderColor3"] = Color3.fromRGB(0, 0, 0)
  5971.  
  5972.             LureVisualUI["8"] = Instance.new("UICorner", LureVisualUI["7"])
  5973.             LureVisualUI["8"]["CornerRadius"] = UDim.new(0, 8000)
  5974.  
  5975.             -- Tween Animation for Pop-Up
  5976.             local tweenInfo = TweenInfo.new(0.5, Enum.EasingStyle.Back, Enum.EasingDirection.Out)
  5977.             local goal = {Size = UDim2.new(0, 168, 0, 46), BackgroundTransparency = 0.3}
  5978.             local tween = game:GetService("TweenService"):Create(LureVisualUI["2"], tweenInfo, goal)
  5979.             tween:Play()
  5980.         end
  5981.  
  5982.         local function cleanupUI()
  5983.             if createdVisual and LureVisualUI["1"] then
  5984.                 -- Smooth fade-out
  5985.                 local fadeOutTween = game:GetService("TweenService"):Create(LureVisualUI["2"], TweenInfo.new(0.5), {BackgroundTransparency = 1, Size = UDim2.new(0, 0, 0, 0)})
  5986.                 fadeOutTween:Play()
  5987.                 fadeOutTween.Completed:Connect(function()
  5988.                     LureVisualUI["1"]:Destroy()
  5989.                     createdVisual = false
  5990.                 end)
  5991.             end
  5992.         end
  5993.  
  5994.         if isEnabled then
  5995.             updateConnection = game:GetService("RunService").Heartbeat:Connect(function()
  5996.                 local player = LocalPlayer
  5997.  
  5998.                 if player.PlayerGui:FindFirstChild("reel") then
  5999.                     cleanupUI()
  6000.                     return
  6001.                 end
  6002.  
  6003.                 local rod = player.Character and player.Character:FindFirstChild(getEquippedRod())
  6004.                 if rod then
  6005.                     local values = rod:FindFirstChild("values")
  6006.                     if values then
  6007.                         local casted = values:FindFirstChild("casted")
  6008.                         if casted and casted.Value == false then
  6009.                             cleanupUI()
  6010.                         elseif casted and casted.Value == true and not createdVisual then
  6011.                             createLureVisual()
  6012.                         end
  6013.  
  6014.                         if createdVisual then
  6015.                             local lure = values:FindFirstChild("lure")
  6016.                             local bite = values:FindFirstChild("bite")
  6017.                             if lure and bite and bite.Value == false and lure.Value < 100 then
  6018.                                 local lureValue = math.floor(lure.Value + 0.5) -- Round to nearest whole number
  6019.                                 LureVisualUI["5"].Text = "Lure: " .. tostring(lureValue) .. "%"
  6020.                             elseif bite and bite.Value then
  6021.                                 LureVisualUI["5"].Text = "Caught!"
  6022.                                 task.delay(0.5, cleanupUI)
  6023.                             end
  6024.                         end
  6025.                     end
  6026.                 else
  6027.                     cleanupUI()
  6028.                 end
  6029.             end)
  6030.         else
  6031.             if updateConnection then
  6032.                 updateConnection:Disconnect()
  6033.                 updateConnection = nil
  6034.             end
  6035.             cleanupUI()
  6036.         end
  6037.     end,
  6038. })
  6039.  
  6040.  
  6041.  
  6042. sections.Visuals:AddToggle("AutoPredictor", {
  6043.     Title = "Auto Predictor",
  6044.     Default = false,
  6045.     Description = "Predict what fish your about to get before catching it",
  6046.     Callback = function(isEnabled)
  6047.         local currentModel = nil
  6048.         while isEnabled do
  6049.             if character then
  6050.                 local rod = character:FindFirstChild(PlayerStats.rod.Value)
  6051.                 if rod then
  6052.                     local bobber = rod:FindFirstChild("bobber")
  6053.                     if bobber then
  6054.                         for _, child in ipairs(bobber:GetChildren()) do
  6055.                             if child:IsA("Model") and child.Name ~= PlayerStats.bait.Value and child.Name ~= PlayerStats.bobber.Value then
  6056.                                 if currentModel ~= child.Name then
  6057.                                     lib:Notification("Auto Predictor","Predicted: "..child.Name, 3)
  6058.                                     currentModel = child.Name
  6059.                                 end
  6060.                             end
  6061.                         end
  6062.                         if currentModel and not bobber:FindFirstChild(currentModel) then
  6063.                             currentModel = nil
  6064.                         end
  6065.                     end
  6066.                 end
  6067.             end
  6068.             task.wait()
  6069.         end
  6070.     end,
  6071. })
  6072.  
  6073. sections.Visuals:AddColorpicker("WaterColor", {
  6074.     Title = "Water Color",
  6075.     Default = Color3.fromRGB(60, 66, 85),
  6076.     Callback = function(selectedColor)
  6077.     game:GetService("Workspace").Terrain.WaterColor = selectedColor
  6078.     end,
  6079. })
  6080.  
  6081. sections.Visuals:AddSlider("WaterSpeed", {
  6082.     Title = "Waves Speed",
  6083.     Description = "",
  6084.     Default = 10,
  6085.     Min = 0,
  6086.     Max = 255,
  6087.     Increment = 1,
  6088.     Callback = function(value)
  6089.         game:GetService("Workspace").Terrain.WaterWaveSpeed = value
  6090.     end,
  6091. })
  6092.  
  6093. local hideUIConnection
  6094. sections.Visuals1:AddToggle("HideUI", {
  6095.     Title = "Hide UI",
  6096.     Default = false,
  6097.     Description = "",
  6098.     Callback = function(isEnabled)
  6099.         local hud = LocalPlayer.PlayerGui:FindFirstChild("hud")
  6100.         if hud and hud:IsA("ScreenGui") then
  6101.             if isEnabled then
  6102.                 hud.Enabled = false
  6103.                 if not hideUIConnection then
  6104.                     hideUIConnection = hud:GetPropertyChangedSignal("Enabled"):Connect(function()
  6105.                         hud.Enabled = false
  6106.                     end)
  6107.                 end
  6108.             else
  6109.                 if hideUIConnection then
  6110.                     hideUIConnection:Disconnect()
  6111.                     hideUIConnection = nil
  6112.                 end
  6113.                 hud.Enabled = true
  6114.             end
  6115.         end
  6116.     end,
  6117. })
  6118.  
  6119.  
  6120. sections.Visuals1:AddColorpicker("RenderScreenColor", {
  6121.     Title = "Change Render Screen Color",
  6122.     Default = Color3.fromRGB(0, 0, 0),
  6123.     Callback = function(selectedColor)
  6124.         local playerGui = LocalPlayer:WaitForChild("PlayerGui")
  6125.         playerGui:FindFirstChild("guh").Frame.BackgroundColor3 = selectedColor
  6126.     end,
  6127. })
  6128.  
  6129. sections.Visuals1:AddToggle("Blackscreen", {
  6130.     Title = "Low Rendering Screen",
  6131.     Default = false,
  6132.     Description = "Disables Rendering",
  6133.     Callback = function(isEnabled)
  6134.         genv.whiteScreenToggle = isEnabled
  6135.         local playerGui = LocalPlayer:WaitForChild("PlayerGui")
  6136.         local blackScreenGui = playerGui:FindFirstChild("guh")
  6137.        
  6138.         if isEnabled then
  6139.             if not blackScreenGui then
  6140.                 blackScreenGui = Instance.new("ScreenGui")
  6141.                 blackScreenGui.Name = "guh"
  6142.                 blackScreenGui.DisplayOrder = 999
  6143.                 blackScreenGui.ResetOnSpawn = false
  6144.                 blackScreenGui.Parent = playerGui
  6145.                
  6146.             if not isfile('Lunor_Trans.png') then
  6147.                 writefile("Lunor_Trans.png", game:HttpGet('https://you.whimper.xyz/sources/lunor/Backup/Lunor_Trans.png'))
  6148.             end
  6149.             genv.Blacke02 = Instance.new("Frame", blackScreenGui)
  6150.             genv.Blacke02.Position = UDim2.new(0,0,0,-60)
  6151.             genv.Blacke02.Size = UDim2.new(1,0,2,0)
  6152.             genv.Blacke02.BackgroundColor3 = Color3.new(0,0,0)
  6153.             genv.Blacke03 = Instance.new("TextLabel", genv.Blacke02)
  6154.             genv.Blacke03.Position = UDim2.new(0.43,0,0,450)
  6155.             genv.Blacke03.AutomaticSize = "XY"
  6156.             genv.Blacke03.Text = "Lunor"
  6157.             genv.Blacke03.TextColor3 = Color3.new(255,255,255)
  6158.             genv.Blacke03.RichText = true
  6159.             genv.Blacke03.TextSize = 100
  6160.             genv.Blacke03.Font = Enum.Font.SourceSansBold
  6161.             genv.Blacke03.BackgroundTransparency = 1
  6162.             genv.Blacke04 = Instance.new("ImageLabel",genv.Blacke02)
  6163.             genv.Blacke04.Position = UDim2.new(0.52,0,0,370)
  6164.             genv.Blacke04.Size = UDim2.new(0,256,0,256)
  6165.             genv.Blacke04.BackgroundTransparency = 1
  6166.             genv.Blacke04.Image = getLunorIcon()
  6167.             end
  6168.             blackScreenGui.Enabled = true
  6169.             game:GetService("RunService"):Set3dRenderingEnabled(false)
  6170.         else
  6171.             if blackScreenGui then
  6172.                 blackScreenGui.Enabled = false
  6173.             end
  6174.             game:GetService("RunService"):Set3dRenderingEnabled(true)
  6175.         end
  6176.     end,
  6177. })
  6178.  
  6179.  
  6180. local rainConnection
  6181.  
  6182. sections.Visuals1:AddToggle("Rain", {
  6183.     Title = "Disable Rain",
  6184.     Default = true,
  6185.     Description = "Hides Raining",
  6186.     Callback = function(isEnabled)
  6187.         genv.hideRainToggle = isEnabled
  6188.  
  6189.         -- Disconnect existing connection if it exists
  6190.         if rainConnection then
  6191.             rainConnection:Disconnect()
  6192.             rainConnection = nil
  6193.         end
  6194.  
  6195.         if isEnabled then
  6196.             -- Continuously monitor and disable rain
  6197.             rainConnection = game:GetService("RunService").RenderStepped:Connect(function()
  6198.                 -- Safely handle potential errors
  6199.                 pcall(function()
  6200.                     -- Disable rain emitters in the Camera
  6201.                     local rainEmitter = workspace.Camera:FindFirstChild("__RainEmitter")
  6202.                     if rainEmitter then
  6203.                         if rainEmitter:FindFirstChild("RainStraight") then
  6204.                             rainEmitter.RainStraight.Lifetime = NumberRange.new(0, 0)
  6205.                         end
  6206.                         if rainEmitter:FindFirstChild("RainTopDown") then
  6207.                             rainEmitter.RainTopDown.Lifetime = NumberRange.new(0, 0)
  6208.                         end
  6209.                     end
  6210.                 end)
  6211.  
  6212.                 -- Disable attachments related to rain in the Terrain
  6213.                 pcall(function()
  6214.                     for _, descendant in ipairs(workspace.Terrain:GetDescendants()) do
  6215.                         if descendant:IsA("Attachment") and (descendant.Name == "__RainOccludedAttachment" or descendant.Name == "__RainSplashAttachment") then
  6216.                             if descendant:FindFirstChild("RainStraight") then
  6217.                                 descendant.RainStraight.Lifetime = NumberRange.new(0, 0)
  6218.                             end
  6219.                             if descendant:FindFirstChild("RainTopDown") then
  6220.                                 descendant.RainTopDown.Lifetime = NumberRange.new(0, 0)
  6221.                             end
  6222.                             if descendant:FindFirstChild("RainSplash") then
  6223.                                 descendant.RainSplash.Lifetime = NumberRange.new(0, 0)
  6224.                             end
  6225.                         end
  6226.                     end
  6227.                 end)
  6228.             end)
  6229.         else
  6230.             -- Re-enable rain emitters when toggled off
  6231.             pcall(function()
  6232.                 local rainEmitter = workspace.Camera:FindFirstChild("__RainEmitter")
  6233.                 if rainEmitter then
  6234.                     if rainEmitter:FindFirstChild("RainStraight") then
  6235.                         rainEmitter.RainStraight.Lifetime = NumberRange.new(0.8, 0.8)
  6236.                     end
  6237.                     if rainEmitter:FindFirstChild("RainTopDown") then
  6238.                         rainEmitter.RainTopDown.Lifetime = NumberRange.new(0.8, 0.8)
  6239.                     end
  6240.                 end
  6241.             end)
  6242.         end
  6243.     end,
  6244. })
  6245.  
  6246.  
  6247.  
  6248. local underwaterConnections = {}
  6249.  
  6250. sections.Visuals1:AddToggle("Rain", {
  6251.     Title = "Disable Underwater Screen",
  6252.     Default = true,
  6253.     Description = "Hides Raining",
  6254.     Callback = function(isEnabled)
  6255.         for _, conn in pairs(underwaterConnections) do
  6256.             if conn.Connected then conn:Disconnect() end
  6257.         end
  6258.         underwaterConnections = {}
  6259.  
  6260.         if isEnabled then
  6261.             local lighting = game:GetService("Lighting")
  6262.             for _, effectName in pairs({"underwaterbl", "underwatercc"}) do
  6263.                 local effect = lighting:FindFirstChild(effectName)
  6264.                 if effect then
  6265.                     table.insert(underwaterConnections, effect:GetPropertyChangedSignal("Enabled"):Connect(function()
  6266.                         if effect.Enabled then effect.Enabled = false end
  6267.                     end))
  6268.                 end
  6269.             end
  6270.         end
  6271.     end,
  6272. })
  6273.  
  6274.  
  6275. -- Clear All Terrain [Improve FPS]
  6276. local terrainClearConnection
  6277. sections.Visuals1:AddToggle("ClearTerrain", {
  6278.     Title = "Clear All Terrain [Improve FPS]",
  6279.     Default = false,
  6280.     Description = "Clears all terrain to improve performance.",
  6281.     Callback = function(isEnabled)
  6282.         genv.clearTerrainToggle = isEnabled
  6283.  
  6284.         -- Disconnect any existing connection
  6285.         if terrainClearConnection then
  6286.             terrainClearConnection:Disconnect()
  6287.             terrainClearConnection = nil
  6288.         end
  6289.  
  6290.         if genv.clearTerrainToggle then
  6291.             -- Continuously clear terrain children
  6292.             terrainClearConnection = game:GetService("RunService").RenderStepped:Connect(function()
  6293.                 workspace.Terrain:ClearAllChildren()
  6294.             end)
  6295.         end
  6296.     end,
  6297. })
  6298.  
  6299. -- Disable Waves [Improve FPS]
  6300. local wavesConnection
  6301. sections.Visuals1:AddToggle("DisableWaves", {
  6302.     Title = "Disable Waves [Improve FPS]",
  6303.     Default = true,
  6304.     Description = "Disables waves to improve performance.",
  6305.     Callback = function(isEnabled)
  6306.         genv.disableWavesToggle = isEnabled
  6307.         if genv.disableWavesToggle == true then
  6308.         local waves =  workspace.active.constant.Waves.Waves:FindFirstChild("waves")
  6309.         if waves then
  6310.         waves.Enabled = false
  6311.         end
  6312.         elseif genv.disableWavesToggle == false then
  6313.         local waves =  workspace.active.constant.Waves.Waves:FindFirstChild("waves")
  6314.         if waves then
  6315.         waves.Enabled = true
  6316.         end
  6317.         end
  6318.     end,
  6319. })
  6320.  
  6321. -- Disable Aurora Borealis Sky [Improve FPS]
  6322. local auroraConnection
  6323. sections.Visuals1:AddToggle("DisableAurora", {
  6324.     Title = "Disable Aurora Borealis Sky [Improve FPS]",
  6325.     Default = true,
  6326.     Description = "Disables aurora borealis beams for better performance.",
  6327.     Callback = function(isEnabled)
  6328.         genv.disableAuroraToggle = isEnabled
  6329.  
  6330.         -- Disconnect any existing connection
  6331.         if auroraConnection then
  6332.             auroraConnection:Disconnect()
  6333.             auroraConnection = nil
  6334.         end
  6335.  
  6336.         if genv.disableAuroraToggle then
  6337.             -- Continuously disable beams in Aurora Borealis
  6338.             auroraConnection = game:GetService("RunService").RenderStepped:Connect(function()
  6339.                 local aurora = workspace:FindFirstChild("active")
  6340.                                and workspace.active:FindFirstChild("constant")
  6341.                                and workspace.active.constant:FindFirstChild("Aurora Borealis")
  6342.                                and workspace.active.constant["Aurora Borealis"]:FindFirstChild("Aurora Borealis")
  6343.                 if aurora and aurora:IsA("Folder") then
  6344.                     for _, beam in ipairs(aurora:GetDescendants()) do
  6345.                         if beam:IsA("Beam") then
  6346.                             beam.Enabled = false
  6347.                         end
  6348.                     end
  6349.                 end
  6350.             end)
  6351.         end
  6352.     end,
  6353. })
  6354.  
  6355.  
  6356. genv.ToggledTest = false
  6357. genv.ColoredREEEL = Color3.new(0.435294, 0, 1)
  6358.  
  6359. sections.Visuals2:AddColorpicker("LocalPlayerColor", {
  6360.     Title = "Character Color",
  6361.     Default = Color3.fromRGB(60, 66, 85),
  6362.     Callback = function(selectedColor)
  6363.     genv.ColoredREEEL = selectedColor
  6364.     for _,v in pairs(LocalPlayer.Character:GetDescendants()) do
  6365.         if genv.ToggledTest == true then
  6366.         if v:IsA("BasePart") then
  6367.                 v.Color = genv.ColoredREEEL
  6368.         end
  6369.     end
  6370.     end
  6371.     end
  6372. })
  6373. genv.ToggledTest = false
  6374. genv.ColoredREEEL = Color3.new(0.435294, 0, 1)
  6375. genv.lockConnections2 = {}
  6376. sections.Visuals2:AddToggle("LocalPlayerIdentity", {
  6377.     Title = "Hide LocalPlayer Identity",
  6378.     Default = false,
  6379.     Description = "",
  6380.     Callback = function(isEnabled)
  6381.         if isEnabled then
  6382.         genv.ToggledTest = true
  6383.         function createRainbowGradient(parent)
  6384.     _G.gradient = Instance.new("UIGradient", parent)
  6385.     _G.gradient.Color = ColorSequence.new{
  6386.         ColorSequenceKeypoint.new(0.000, Color3.fromRGB(242, 138, 54)),
  6387.         ColorSequenceKeypoint.new(0.250, Color3.fromRGB(242, 54, 107)),
  6388.         ColorSequenceKeypoint.new(0.500, Color3.fromRGB(134, 54, 242)),
  6389.         ColorSequenceKeypoint.new(0.750, Color3.fromRGB(54, 187, 242)),
  6390.         ColorSequenceKeypoint.new(1.000, Color3.fromRGB(54, 242, 173))
  6391.     }
  6392.     return _G.gradient
  6393. end
  6394.  
  6395. function setupCharacter(character)
  6396.     _G.humanoidRootPart = character:WaitForChild("HumanoidRootPart")
  6397.     _G.user = _G.humanoidRootPart:WaitForChild("user")
  6398.  
  6399.     -- Cleanup previous character meshes and appearance
  6400.     for _, v in ipairs(character:GetDescendants()) do
  6401.         if v:IsA("CharacterMesh") or v:IsA("Accessory") or v:IsA("SpecialMesh") or (v:IsA("Decal") and v.Name == "face") then
  6402.             v:Destroy()
  6403.         elseif v:IsA("BasePart") then
  6404.             v.Material = Enum.Material.Neon
  6405.             v.Color = genv.ColoredREEEL
  6406.         end
  6407.     end
  6408.  
  6409.     if character:FindFirstChild("Shirt") then character.Shirt:Destroy() end
  6410.     if character:FindFirstChild("Pants") then character.Pants:Destroy() end
  6411.  
  6412.     -- Apply rainbow gradients
  6413.     _G.Rainbow = createRainbowGradient(_G.user.user)
  6414.     _G.Rainbow2 = createRainbowGradient(_G.user.level)
  6415.     _G.Rainbow3 = createRainbowGradient(_G.user.streak)
  6416.     _G.Rainbow4 = createRainbowGradient(_G.user.title)
  6417.     _G.Rainbow5 = createRainbowGradient(LocalPlayer.PlayerGui.hud.safezone.coins)
  6418.     _G.Rainbow6 = createRainbowGradient(LocalPlayer.PlayerGui.hud.safezone.lvl)
  6419.  
  6420. genv.lockConnections = {}
  6421.  
  6422. function lockText(property, target, value)
  6423.     target[property] = value
  6424.  
  6425.     -- Create a connection to monitor property changes
  6426.     genv.connection = target:GetPropertyChangedSignal(property):Connect(function()
  6427.         if target[property] ~= value then
  6428.             target[property] = value
  6429.         end
  6430.     end)
  6431.  
  6432.     -- Store the connection in the lockConnections table
  6433.     table.insert(genv.lockConnections, genv.connection)
  6434. end
  6435.  
  6436.     lockText("Text", _G.user.user, "Hidden")
  6437.     lockText("Text", _G.user.level, "Level: ∞")
  6438.     lockText("Text", _G.user.streak, "∞")
  6439.     lockText("Text", _G.user.title, "❤")
  6440.     lockText("Text", LocalPlayer.PlayerGui.hud.safezone.coins, "~~~~~~★ C$")
  6441.     lockText("Text", LocalPlayer.PlayerGui.hud.safezone.lvl, "Level: ∞")
  6442.     genv.MoneyLog = nil
  6443.     genv.MoneyLog = LocalPlayer.PlayerGui.hud.safezone.StatChangeList.ChildAdded:Connect(function(v)
  6444.         if v:IsA("TextLabel") then
  6445.             v.Text = "math.huge 👍"
  6446.         end
  6447.     end)
  6448.  
  6449. function lockTextSafe(path, text)
  6450.  _G.success, _G.err = pcall(function()
  6451.         lockText("Text", path, text)
  6452.     end)
  6453.     if not _G.success then
  6454.         warn("Failed to set lockText: " .. _G.err)
  6455.     end
  6456. end
  6457. _G.players = Players
  6458. _G.localPlayer = _G.players.LocalPlayer
  6459. _G.userId = "p_" .. _G.localPlayer.UserId
  6460.  
  6461. _G.roactProvider = game:GetService("CoreGui"):FindFirstChild("RoactAppExperimentProvider")
  6462. if not _G.roactProvider then
  6463.     warn("Please wait till your game is fully loaded")
  6464.     return
  6465. end
  6466.  
  6467. _G.offsetFrame = _G.roactProvider:FindFirstChild("Children")
  6468.     and _G.roactProvider.Children:FindFirstChild("OffsetFrame")
  6469. if _G.offsetFrame then
  6470.     _G.undoFrame = _G.offsetFrame:FindFirstChild("PlayerScrollList")
  6471.         and _G.offsetFrame.PlayerScrollList:FindFirstChild("SizeOffsetFrame")
  6472.         and _G.offsetFrame.PlayerScrollList.SizeOffsetFrame.ScrollingFrameContainer
  6473.         and _G.offsetFrame.PlayerScrollList.SizeOffsetFrame.ScrollingFrameContainer.ScrollingFrameClippingFrame
  6474.         and _G.offsetFrame.PlayerScrollList.SizeOffsetFrame.ScrollingFrameContainer.ScrollingFrameClippingFrame.ScollingFrame
  6475.         and _G.offsetFrame.PlayerScrollList.SizeOffsetFrame.ScrollingFrameContainer.ScrollingFrameClippingFrame.ScollingFrame.OffsetUndoFrame
  6476.  
  6477.     if _G.undoFrame and _G.undoFrame[_G.userId] then
  6478.         _G.userFrame = _G.undoFrame[_G.userId]:WaitForChild("ChildrenFrame")
  6479.  
  6480.         lockTextSafe(_G.userFrame:WaitForChild("NameFrame"):WaitForChild("BGFrame"):WaitForChild("OverlayFrame"):WaitForChild("PlayerName"):WaitForChild("PlayerName"), "⭐ You Found Me!")
  6481.         lockTextSafe(_G.userFrame:WaitForChild("GameStat_C$"):WaitForChild("OverlayFrame"):WaitForChild("StatText"), "★★★★★")
  6482.         lockTextSafe(_G.userFrame:WaitForChild("GameStat_Level"):WaitForChild("OverlayFrame"):WaitForChild("StatText"), "∞")
  6483.     end
  6484. end
  6485.  
  6486.     function animateRainbow()
  6487.         _G.multi = 0.7
  6488.         _G.val = 0
  6489.        
  6490.         game:GetService("RunService").RenderStepped:Connect(function(r)
  6491.             _G.val += r*_G.multi
  6492.            
  6493.             if _G.val > 0.5 then
  6494.                 _G.multi = _G.multi*-1
  6495.             elseif _G.val < -0.5 then
  6496.                 _G.multi = _G.multi*-1
  6497.             end
  6498.  
  6499.             _G.Rainbow.Offset = Vector2.new(_G.val, 0)
  6500.             _G.Rainbow2.Offset = Vector2.new(_G.val, 0)
  6501.             _G.Rainbow3.Offset = Vector2.new(_G.val, 0)
  6502.             _G.Rainbow4.Offset = Vector2.new(_G.val, 0)
  6503.             _G.Rainbow5.Offset = Vector2.new(_G.val, 0)
  6504.             _G.Rainbow6.Offset = Vector2.new(_G.val, 0)
  6505.         end)
  6506.     end
  6507.  
  6508.     task.spawn(animateRainbow)
  6509. end
  6510.  
  6511.  
  6512. genv.Cow = nil
  6513. genv.Cow = LocalPlayer.CharacterAdded:Connect(setupCharacter)
  6514. if LocalPlayer.Character then
  6515.     setupCharacter(LocalPlayer.Character)
  6516. end
  6517.  
  6518. genv.Cow2 = nil
  6519. genv.Cow2 = game:GetService("CoreGui").ExperienceChat.appLayout.chatWindow.scrollingView.bottomLockedScrollView
  6520.     .RCTScrollView.RCTScrollContentView.DescendantAdded:Connect(function(descendant)
  6521.         if descendant:IsA("TextLabel") then
  6522.             descendant.Text = string.gsub(descendant.Text, LocalPlayer.Name, "[Hidden]")
  6523.             descendant.Text = string.gsub(descendant.Text, LocalPlayer.DisplayName, "[Hidden]")
  6524.         end
  6525.     end)
  6526. genv.Cow3 = nil
  6527. genv.Cow3 = LocalPlayer.PlayerGui.hud.safezone.topannouncements.DescendantAdded:Connect(function(descendant)
  6528.         if descendant:IsA("TextLabel") then
  6529.             descendant.Text = string.gsub(descendant.Text, LocalPlayer.Name, "[Hidden]")
  6530.             descendant.Text = string.gsub(descendant.Text, LocalPlayer.DisplayName, "[Hidden]")
  6531.         end
  6532.     end)
  6533. for _, descendant in pairs(game:GetService("CoreGui").ExperienceChat.appLayout.chatWindow.scrollingView.bottomLockedScrollView.RCTScrollView.RCTScrollContentView:GetDescendants()) do
  6534.     if descendant:IsA("TextLabel") then
  6535.         descendant.Text = string.gsub(descendant.Text, LocalPlayer.Name, "[Hidden]")
  6536.         descendant.Text = string.gsub(descendant.Text, LocalPlayer.DisplayName, "[Hidden]")
  6537.     end
  6538. end
  6539.     repeat task.wait()
  6540.         if genv.ToggledTest == false then
  6541.     genv.Cow3:Disconnect()
  6542.     genv.Cow3 = nil
  6543.     genv.Cow2:Disconnect()
  6544.     genv.Cow2 = nil
  6545.     genv.Cow:Disconnect()
  6546.     genv.Cow = nil
  6547.     genv.MoneyLog:Disconnect()
  6548.     genv.MoneyLog = nil
  6549.  
  6550.     for _, connection in ipairs(genv.lockConnections) do
  6551.     connection:Disconnect()
  6552.     end
  6553.     genv.lockConnections = {}
  6554.     print("Disabled Testing")
  6555.     end
  6556.     until genv.ToggledTest == false
  6557.     else
  6558.     if genv.ToggledTest == true then
  6559.         genv.ToggledTest = false
  6560.         lib:Notification("Hide LocalPlayer Identity", "All actions stopped. To fully disable, die using the 'Die' button in Misc > Character.", 10)
  6561.     end
  6562.         end
  6563.     end,
  6564. })
  6565.  
  6566. sections.Visuals2:AddToggle("HideAllIdentities", {
  6567.     Title = "Hide All Player Identities",
  6568.     Default = false,
  6569.     Description = "Extra Protection if you want to protect your self",
  6570.     Callback = function(isEnabled)
  6571.         genv.HideAllIdentitiesEnabled = isEnabled
  6572.  
  6573.         local function safeCall(func)
  6574.             local success, result = pcall(func)
  6575.             if not success then
  6576.                 warn("Error occurred: ", result)
  6577.             end
  6578.         end
  6579.  
  6580.         local function hideIdentityForCharacter(character)
  6581.             for _, descendant in ipairs(character:GetDescendants()) do
  6582.                 safeCall(function()
  6583.                     -- Check for and modify or remove name tags and other elements related to user information
  6584.                     if descendant:IsA("BillboardGui") then
  6585.                         local user = descendant:FindFirstChild("user")
  6586.                         if user then
  6587.                             -- Hide user-related information
  6588.                             if user:FindFirstChild("user") then
  6589.                                 user.user.Text = "[Hidden]"
  6590.                             end
  6591.                             if user:FindFirstChild("level") then
  6592.                                 user.level.Text = "[Hidden]"
  6593.                             end
  6594.                             if user:FindFirstChild("streak") then
  6595.                                 user.streak.Text = "[Hidden]"
  6596.                             end
  6597.                             if user:FindFirstChild("title") then
  6598.                                 user.title.Text = "[Hidden]"
  6599.                             end
  6600.                         end
  6601.                     end
  6602.  
  6603.                     if character:FindFirstChild("Shirt") then character.Shirt:Destroy() end
  6604.                     if character:FindFirstChild("Pants") then character.Pants:Destroy() end
  6605.  
  6606.                     if descendant:IsA("Accessory") or descendant:IsA("CharacterMesh") or (descendant:IsA("Decal") and descendant.Name == "face") then
  6607.                         descendant:Destroy()
  6608.                     end
  6609.  
  6610.                     -- Remove tags or other UI elements
  6611.                     if descendant:IsA("TextLabel") or descendant:IsA("TextButton") then
  6612.                         if descendant.Text then
  6613.                             descendant.Text = "[Hidden]"
  6614.                         end
  6615.                     end
  6616.                    
  6617.                     -- Remove character meshes, accessories, and face decals
  6618.                     if descendant:IsA("CharacterMesh") or descendant:IsA("Accessory") or descendant:IsA("SpecialMesh") or (descendant:IsA("Decal") and descendant.Name == "face") then
  6619.                         descendant:Destroy()
  6620.                     elseif descendant:IsA("BasePart") then
  6621.                         descendant.Material = Enum.Material.Rubber
  6622.                     end
  6623.                 end)
  6624.             end
  6625.         end
  6626.  
  6627.         function lockText(property, target, value)
  6628.             target[property] = value
  6629.             local connection = target:GetPropertyChangedSignal(property):Connect(function()
  6630.                 if target[property] ~= value then
  6631.                     target[property] = value
  6632.                 end
  6633.             end)
  6634.             table.insert(genv.lockConnections2, connection)
  6635.         end
  6636.  
  6637.         function lockTextSafe(path, text)
  6638.             local success, err = pcall(function()
  6639.                 lockText("Text", path, text)
  6640.             end)
  6641.             if not success then
  6642.                 warn("Failed to set lockText: " .. err)
  6643.             end
  6644.         end
  6645.  
  6646.         local function hideAllPlayers()
  6647.             local players = Players
  6648.             local roactProvider = game:GetService("CoreGui"):FindFirstChild("RoactAppExperimentProvider")
  6649.             if not roactProvider then
  6650.                 warn("Please wait till your game is fully loaded")
  6651.                 return
  6652.             end
  6653.  
  6654.             _G.offsetFrame = roactProvider.Children:FindFirstChild("OffsetFrame")
  6655.             if _G.offsetFrame then
  6656.                 local undoFrame = game:GetService("CoreGui").RoactAppExperimentProvider.Children.OffsetFrame.PlayerScrollList.SizeOffsetFrame.ScrollingFrameContainer.ScrollingFrameClippingFrame.ScollingFrame.OffsetUndoFrame
  6657.  
  6658.                 if undoFrame then
  6659.                     for _, player in ipairs(players:GetPlayers()) do
  6660.                         local playerFrame = undoFrame:FindFirstChild("p_"..player.UserId)
  6661.                         if playerFrame then
  6662.                             local userFrame = playerFrame:WaitForChild("ChildrenFrame")
  6663.                             local playerNameLabel = userFrame:WaitForChild("NameFrame"):WaitForChild("BGFrame"):WaitForChild("OverlayFrame"):WaitForChild("PlayerName"):WaitForChild("PlayerName")
  6664.                             lockTextSafe(playerNameLabel, "[Hidden]")
  6665.                            
  6666.                             local gameStatCLabel = userFrame:WaitForChild("GameStat_C$"):WaitForChild("OverlayFrame"):WaitForChild("StatText")
  6667.                             lockTextSafe(gameStatCLabel, "★★★★★")
  6668.  
  6669.                             local gameStatLevelLabel = userFrame:WaitForChild("GameStat_Level"):WaitForChild("OverlayFrame"):WaitForChild("StatText")
  6670.                             lockTextSafe(gameStatLevelLabel, "∞")
  6671.                         end
  6672.                     end
  6673.                 end
  6674.             end
  6675.         end
  6676.  
  6677.         local function hideChatMessages()
  6678.             safeCall(function()
  6679.                 local chat = game:GetService("CoreGui"):FindFirstChild("ExperienceChat")
  6680.                 if chat then
  6681.                     local players = Players
  6682.                     local playerNames = {}
  6683.  
  6684.                     -- Collect all player names and display names
  6685.                     for _, player in ipairs(players:GetPlayers()) do
  6686.                         table.insert(playerNames, player.Name)
  6687.                         table.insert(playerNames, player.DisplayName)
  6688.                     end
  6689.  
  6690.                     -- Iterate through all descendants of the chat
  6691.                     for _, descendant in ipairs(chat:GetDescendants()) do
  6692.                         if descendant:IsA("TextLabel") and descendant.Text then
  6693.                             -- Replace each player's name and display name with "[Hidden]"
  6694.                             for _, name in ipairs(playerNames) do
  6695.                                 descendant.Text = descendant.Text:gsub(name, "[Hidden]")
  6696.                             end
  6697.                         end
  6698.                     end
  6699.                 end
  6700.             end)
  6701.         end
  6702.  
  6703.         local function hideAllIdentities()
  6704.             local players = Players
  6705.            
  6706.             while genv.HideAllIdentitiesEnabled do
  6707.                 -- Hide identities in the workspace
  6708.                 for _, player in ipairs(players:GetPlayers()) do
  6709.                     if player.Character and player.Character:FindFirstChild("Humanoid") then
  6710.                         hideIdentityForCharacter(player.Character)
  6711.                     end
  6712.                 end
  6713.                 hideAllPlayers()
  6714.                 hideChatMessages()
  6715.  
  6716.                 task.wait() -- Adding a small wait to reduce strain
  6717.             end
  6718.         end
  6719.  
  6720.         if isEnabled then
  6721.             task.spawn(hideAllIdentities)
  6722.         elseif genv.HideAllIdentitiesEnabled == false then
  6723.             for _, connection in ipairs(genv.lockConnections2) do
  6724.                 connection:Disconnect()
  6725.             end
  6726.             genv.lockConnections2 = {}
  6727.             -- lib:Notification("Hide All Player Identities", "Stopped hiding all player identities.", 5)
  6728.         end
  6729.     end
  6730. })
  6731.  
  6732.  
  6733.  
  6734. -- genv.ColorBox = Color3.fromRGB(255, 255, 255)
  6735. -- sections.Visuals3:AddColorpicker("ESPColor", {
  6736. --     Title = "ESP Color",
  6737. --     Default = Color3.fromRGB(255, 255, 255),
  6738. --     Callback = function(selectedColor)
  6739. --     genv.ColorBox = selectedColor
  6740. --     end,
  6741. -- })
  6742. -- local selectedESPEventFish = {}
  6743. -- sections.Visuals3:AddDropdown("EventESP", {
  6744. --     Title = "Event Visual",
  6745. --     Description = "",
  6746. --     Options = {"The Depths - Serpent", "Megalodon", "Great Hammerhead Shark", "Great White Shark", "Whale Shark", "Isonade", "Chinook Salmon Abundance", "Arapaima Abundance", "Mackerel Abundance"},
  6747. --     Default = {"The Depths - Serpent", "Megalodon", "Great Hammerhead Shark", "Great White Shark", "Whale Shark", "Isonade", "Chinook Salmon Abundance", "Arapaima Abundance", "Mackerel Abundance"},
  6748. --     PlaceHolder = "Select a Certain Event",
  6749. --     Multiple = true,
  6750. --     Callback = function(selectedEvents)
  6751. --         selectedESPEventFish = selectedEvents
  6752. --     end,
  6753. -- })
  6754. -- local allESPEvent = {}
  6755. -- local toggedESPEVENT = false
  6756.  
  6757. -- sections.Visuals3:AddToggle("ToggleEVENTESP", {
  6758. --     Title = "ESP Event",
  6759. --     Default = true,
  6760. --     Description = "Gives a Cool ESP Event",
  6761. --     Callback = function(isEnabled)
  6762. --         toggedESPEVENT = isEnabled
  6763.  
  6764. --         if toggedESPEVENT then
  6765. --             while toggedESPEVENT do
  6766. --                 for _, child in pairs(workspace.zones.fishing:GetChildren()) do
  6767. --                     if child:FindFirstChild("beacon") then
  6768. --                         local poiHeader = child:FindFirstChild("POIHeader")
  6769. --                         if poiHeader and poiHeader:FindFirstChild("title") and poiHeader.title:IsA("TextLabel") then
  6770. --                             print("Event title:", poiHeader.title.Text)
  6771.                            
  6772. --                             -- Check if the event title matches any from `allESPEvent`
  6773. --                             for _, event in pairs(allESPEvent) do
  6774. --                                 if poiHeader.title.Text:find(event) then
  6775. --                                     local object = Sense.AddInstance(child, {
  6776. --                                         text = "{name} | {distance} | {position}", -- Placeholders
  6777. --                                         textColor = { Color3.new(1, 1, 1), 1 },
  6778. --                                         textOutline = true,
  6779. --                                         textOutlineColor = Color3.new(),
  6780. --                                         textSize = 13,
  6781. --                                         textFont = 2,
  6782. --                                         limitDistance = false,
  6783. --                                         maxDistance = 150
  6784. --                                     })
  6785. --                                     object.options.enabled = true
  6786. --                                     table.insert(allESPEvent, object) -- Add the ESP instance to the table
  6787. --                                 end
  6788. --                             end
  6789. --                         end
  6790. --                     end
  6791. --                 end
  6792. --                 wait(0.1) -- Prevent script from freezing
  6793. --             end
  6794. --         else
  6795. --             -- Disable all toggles in the table
  6796. --             for _, object in pairs(allESPEvent) do
  6797. --                 if object.options then
  6798. --                     object.options.enabled = false
  6799. --                 end
  6800. --             end
  6801. --             allESPEvent = {} -- Clear the table
  6802. --         end
  6803. --     end,
  6804. -- })
  6805.  
  6806. sections.Visuals4:AddParagraph({Title = "Information", Description = "This feature is new and was rushed, it doesn't work with some rods and looks very scuffed. It will be improved later on."})
  6807.  
  6808.  
  6809. local function ApplySkin(rodName, skinName)
  6810.     if game.Players.LocalPlayer.Character:FindFirstChild("Skin") then
  6811.         game.Players.LocalPlayer.Character:FindFirstChild("Skin"):Destroy()
  6812.     end
  6813.  
  6814.     local rod = services.ReplicatedStorage.resources.models.RodSkins[rodName]
  6815.     if not rod then
  6816.         warn("Rod not found:", rodName)
  6817.         return
  6818.     end
  6819.  
  6820.     local skinModel = rod[skinName]
  6821.     if not skinModel then
  6822.         warn("Skin not found:", skinName)
  6823.         return
  6824.     end
  6825.  
  6826.     local skin = skinModel.Skin:Clone()
  6827.     skin.Parent = game.Players.LocalPlayer.Character
  6828.  
  6829.     local tool = game.Players.LocalPlayer.Character:FindFirstChildOfClass("Tool")
  6830.     local handle = tool.handle
  6831.     local details = tool.Details
  6832.  
  6833.     local weldToArm = handle:FindFirstChild("WeldToArm")
  6834.     local C0 = weldToArm and weldToArm.C0 or CFrame.new()
  6835.     local C1 = weldToArm and weldToArm.C1 or CFrame.new()
  6836.     local CurrentAngle = weldToArm and weldToArm.CurrentAngle or 0
  6837.  
  6838.     skin:SetPrimaryPartCFrame(game.Players.LocalPlayer.Character["Right Arm"].CFrame)
  6839.     details:ClearAllChildren()
  6840.  
  6841.     for _, v in pairs(skin:GetDescendants()) do
  6842.         if v:IsA("BasePart") then
  6843.             v.Anchored = false
  6844.         end
  6845.     end
  6846.  
  6847.     local clone1 = skin.Details:Clone()
  6848.     local clone2 = skin.handle:Clone()
  6849.     clone1.Parent = tool
  6850.     clone2.Parent = tool
  6851.  
  6852.     clone2.CFrame = handle.CFrame
  6853.     clone1.WorldPivot = details.WorldPivot
  6854.  
  6855.     handle.Transparency = 1
  6856.     for _, v in pairs(details:GetDescendants()) do
  6857.         if v:IsA("BasePart") then
  6858.             v.Transparency = 1
  6859.         end
  6860.     end
  6861.  
  6862.     if not clone2:FindFirstChild("Motor6D") then
  6863.         local newMotor = Instance.new("Motor6D")
  6864.         newMotor.Part0 = game.Players.LocalPlayer.Character["Right Arm"]
  6865.         newMotor.Part1 = clone2
  6866.         newMotor.C0 = C0
  6867.         newMotor.C1 = C1
  6868.         newMotor.CurrentAngle = CurrentAngle
  6869.         newMotor.Parent = clone2
  6870.     end
  6871. end
  6872.    
  6873.  
  6874. local RodSkins = services.ReplicatedStorage.resources.models.RodSkins
  6875. local rodSkinList = {}
  6876.  
  6877. for _, rod in ipairs(RodSkins:GetChildren()) do
  6878.     for _, child in ipairs(rod:GetChildren()) do
  6879.         table.insert(rodSkinList, rod.Name .. " - " .. child.Name)
  6880.     end
  6881. end
  6882.  
  6883. local selectedRodName, selectedSkinName
  6884.  
  6885. sections.Visuals4:AddDropdown("RodSkin", {
  6886.     Title = "Rod Skins",
  6887.     Description = "",
  6888.     Options = rodSkinList,
  6889.     Default = "",
  6890.     PlaceHolder = "Select Skin",
  6891.     Multiple = false,
  6892.     Callback = function(selectedSkin)
  6893.         local rodName, skinName = selectedSkin:match("^(.-) %- (.+)$")
  6894.         if rodName and skinName then
  6895.             selectedRodName = rodName
  6896.             selectedSkinName = skinName
  6897.             print("Selected Rod:", rodName, "Skin:", skinName)
  6898.         else
  6899.             print("Invalid selection format")
  6900.         end
  6901.     end,
  6902. })
  6903.  
  6904. local skinGroupButton = sections.Visuals4:AddGroupButton()
  6905.  
  6906. skinGroupButton:AddButton({
  6907.     Title = "Apply Skin",
  6908.     Variant = "Primary",
  6909.     Callback = function()
  6910.         if selectedRodName and selectedSkinName then
  6911.             ApplySkin(selectedRodName, selectedSkinName)
  6912.         else
  6913.             warn("No skin selected!")
  6914.         end
  6915.     end,
  6916. })
  6917.  
  6918.  
  6919. skinGroupButton:AddButton({
  6920.     Title = "Remove Skin",
  6921.     Variant = "Primary",
  6922.     Callback = function()
  6923.         lib:Notification("Remove Skin", "This doesn't do anything yet, to remove it just equip a different rod then re-equip the rod.", 8)
  6924.     end
  6925. })
  6926.  
  6927. --[[3itx Code]]--
  6928. genv.selectedBoatLocation = nil
  6929. genv.SelectedBoatSpawn = nil
  6930.  
  6931. local BoatsDataSheet = {
  6932.     ["Moosewood"] = {
  6933.         ["Coords"] = {357.9726, 133.616, 258.1545},
  6934.         ["Loaded"] = false,
  6935.         ["Path"] = 'workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Moosewood Shipwright")',
  6936.         ["remote"] = function()
  6937.             return workspace:WaitForChild("world")
  6938.                 :WaitForChild("npcs")
  6939.                 :WaitForChild("Moosewood Shipwright")
  6940.                 :WaitForChild("shipwright")
  6941.                 :WaitForChild("giveUI")
  6942.                 :InvokeServer()
  6943.         end
  6944.     },
  6945.     ["Sunstone"] = {
  6946.         ["Coords"] = {-945.2999, 131.0788, -1116.2346},
  6947.         ["Loaded"] = false,
  6948.         ["Path"] = 'workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Sunstone Shipwright")',
  6949.         ["remote"] = function()
  6950.             return workspace:WaitForChild("world")
  6951.                 :WaitForChild("npcs")
  6952.                 :WaitForChild("Sunstone Shipwright")
  6953.                 :WaitForChild("shipwright")
  6954.                 :WaitForChild("giveUI")
  6955.                 :InvokeServer()
  6956.         end
  6957.     },
  6958.     ["Statue"] = {
  6959.         ["Coords"] = {23.2196, 135.0304, -1007.0291},
  6960.         ["Loaded"] = false,
  6961.         ["Path"] = 'workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Statue Shipwright")',
  6962.         ["remote"] = function()
  6963.             return workspace:WaitForChild("world")
  6964.                 :WaitForChild("npcs")
  6965.                 :WaitForChild("Statue Shipwright")
  6966.                 :WaitForChild("shipwright")
  6967.                 :WaitForChild("giveUI")
  6968.                 :InvokeServer()
  6969.         end
  6970.     },
  6971.     ["Snowcap"] = {
  6972.         ["Coords"] = {2622.9399, 136.2839, 2401.3052},
  6973.         ["Loaded"] = false,
  6974.         ["Path"] = 'workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Snowcap Shipwright")',
  6975.         ["remote"] = function()
  6976.             return workspace:WaitForChild("world")
  6977.                 :WaitForChild("npcs")
  6978.                 :WaitForChild("Snowcap Shipwright")
  6979.                 :WaitForChild("shipwright")
  6980.                 :WaitForChild("giveUI")
  6981.                 :InvokeServer()
  6982.         end
  6983.     },
  6984.     ["Ancient"] = {
  6985.         ["Coords"] = {5869.421875, 143.49795532226562, 7.101318359375},
  6986.         ["Loaded"] = false,
  6987.         ["Path"] = 'workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Ancient Shipwright")',
  6988.         ["remote"] = function()
  6989.             return workspace:WaitForChild("world")
  6990.                 :WaitForChild("npcs")
  6991.                 :WaitForChild("Ancient Shipwright")
  6992.                 :WaitForChild("shipwright")
  6993.                 :WaitForChild("giveUI")
  6994.                 :InvokeServer()
  6995.         end
  6996.     },
  6997.     ["Terrapin"] = {
  6998.         ["Coords"] = {-186.7543, 132.5000, 1922.5327},
  6999.         ["Loaded"] = false,
  7000.         ["Path"] = 'workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Terrapin Shipwright")',
  7001.         ["remote"] = function()
  7002.             return workspace:WaitForChild("world")
  7003.                 :WaitForChild("npcs")
  7004.                 :WaitForChild("Terrapin Shipwright")
  7005.                 :WaitForChild("shipwright")
  7006.                 :WaitForChild("giveUI")
  7007.                 :InvokeServer()
  7008.         end
  7009.     },
  7010.     ["North"] = {
  7011.         ["Coords"] = {19609.19140625, 131.42013549804688, 5186.5927734375},
  7012.         ["Loaded"] = false,
  7013.         ["Path"] = 'workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Summit Shipwright")',
  7014.         ["remote"] = function()
  7015.             return workspace:WaitForChild("world")
  7016.                 :WaitForChild("npcs")
  7017.                 :WaitForChild("Summit Shipwright")
  7018.                 :WaitForChild("shipwright")
  7019.                 :WaitForChild("giveUI")
  7020.                 :InvokeServer()
  7021.         end
  7022.     },
  7023.     ["Roslit"] = {
  7024.         ["Coords"] = {-1452.0543, 133.0000, 745.1692},
  7025.         ["Loaded"] = false,
  7026.         ["Path"] = 'workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Roslit Shipwright")',
  7027.         ["remote"] = function()
  7028.             return workspace:WaitForChild("world")
  7029.                 :WaitForChild("npcs")
  7030.                 :WaitForChild("Roslit Shipwright")
  7031.                 :WaitForChild("shipwright")
  7032.                 :WaitForChild("giveUI")
  7033.                 :InvokeServer()
  7034.         end
  7035.     },
  7036.     ["Mushgrove"] = {
  7037.         ["Coords"] = {2453.9727, 130.5296, -661.6033},
  7038.         ["Loaded"] = false,
  7039.         ["Path"] = 'workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Mushgrove Shipwright")',
  7040.         ["remote"] = function()
  7041.             return workspace:WaitForChild("world")
  7042.                 :WaitForChild("npcs")
  7043.                 :WaitForChild("Mushgrove Shipwright")
  7044.                 :WaitForChild("shipwright")
  7045.                 :WaitForChild("giveUI")
  7046.                 :InvokeServer()
  7047.         end
  7048.     },
  7049.         ["Forsaken"] = {
  7050.         ["Coords"] = {-2476.388427734375, 130.1121368408203, 1540.5460205078125},
  7051.         ["Loaded"] = false,
  7052.         ["Path"] = 'workspace:WaitForChild("world"):WaitForChild("npcs"):WaitForChild("Forsaken Shipwright")',
  7053.         ["remote"] = function()
  7054.             return workspace:WaitForChild("world")
  7055.                 :WaitForChild("npcs")
  7056.                 :WaitForChild("Forsaken Shipwright")
  7057.                 :WaitForChild("shipwright")
  7058.                 :WaitForChild("giveUI")
  7059.                 :InvokeServer()
  7060.         end
  7061.     }
  7062. }
  7063.  
  7064. genv.BoatLocations = {}
  7065. genv.Boats = {}
  7066.  
  7067. for _, v in pairs(services.ReplicatedStorage:WaitForChild("playerstats"):WaitForChild(services.Players.LocalPlayer.Name):WaitForChild("Boats"):GetChildren()) do
  7068.     table.insert(genv.Boats, v.Name)
  7069. end
  7070. for Sex, _ in pairs(BoatsDataSheet) do
  7071.     table.insert(genv.BoatLocations, Sex)
  7072. end
  7073.  
  7074. sections.Misc4:AddDropdown("",{
  7075.     Title = "Spawn Location",
  7076.     Description = "",
  7077.     Options = genv.BoatLocations,
  7078.     Default = "",
  7079.     PlaceHolder = "Select a Spawn Location",
  7080.     Multiple = false,
  7081.     Callback = function(BoatLocation)
  7082.     genv.selectedBoatLocation = BoatLocation
  7083.     end,
  7084. })
  7085. local BoatsDropdown
  7086. BoatsDropdown = sections.Misc4:AddDropdown("",{
  7087.     Title = "Select Boat",
  7088.     Description = "",
  7089.     Options = genv.Boats,
  7090.     Default = "",
  7091.     PlaceHolder = "Select a Boat",
  7092.     Multiple = false,
  7093.     Callback = function(Boat)
  7094.     genv.SelectedBoatSpawn = Boat
  7095.     end,
  7096. })
  7097. local BoatOptions = sections.Misc4:AddGroupButton()
  7098. BoatOptions:AddButton({
  7099.     Title = "Refresh Boat List",
  7100.     Variant = "Primary",
  7101.     Callback = function()
  7102.     table.clear(genv.Boats)
  7103.     for _, v in pairs(services.ReplicatedStorage:WaitForChild("playerstats"):WaitForChild(services.Players.LocalPlayer.Name):WaitForChild("Boats"):GetChildren()) do
  7104.     table.insert(genv.Boats, v.Name)
  7105.     end
  7106.     BoatsDropdown:Refresh(genv.Boats,true)
  7107.     BoatsDropdown:Set(genv.SelectedBoatSpawn)
  7108.     end,
  7109. })
  7110.  
  7111. BoatOptions:AddButton({
  7112.     Title = "Spawn Boat",
  7113.     Variant = "Primary",
  7114.     Callback = function()
  7115.         local selectedBoatName = genv.SelectedBoatSpawn
  7116.         local selectedBoatLocation = genv.selectedBoatLocation
  7117.        
  7118.         if selectedBoatName and selectedBoatLocation then
  7119.             local boatData = BoatsDataSheet[selectedBoatLocation]
  7120.            
  7121.             if boatData then
  7122.                 if boatData.Loaded then
  7123.                     boatData.remote()
  7124.                     task.wait()
  7125.                     services.Players.LocalPlayer.PlayerGui.hud.safezone.backpack.Visible = true
  7126.                     services.Players.LocalPlayer.PlayerGui.hud.safezone.shipwright.Visible = false
  7127.                     services.ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RF/Boats/Spawn"):InvokeServer(selectedBoatName)
  7128.                 else
  7129.                     local coords = boatData.Coords
  7130.                     local player = game.Players.LocalPlayer
  7131.                     local position = Vector3.new(unpack(coords))
  7132.                     player:RequestStreamAroundAsync(position)
  7133.                     local path = loadstring("return " .. boatData.Path)()
  7134.                     path.ModelStreamingMode = Enum.ModelStreamingMode.Persistent
  7135.                     prompt(path)
  7136.                     task.wait()
  7137.                     boatData.remote()
  7138.                     task.wait()
  7139.                     services.Players.LocalPlayer.PlayerGui.hud.safezone.backpack.Visible = true
  7140.                     services.Players.LocalPlayer.PlayerGui.hud.safezone.shipwright.Visible = false
  7141.                     services.ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RF/Boats/Spawn"):InvokeServer(selectedBoatName)
  7142.                     boatData.Loaded = true
  7143.                 end
  7144.             else
  7145.                 lib:Notification("Boat Error", "Invalid boat selected.", 3)
  7146.             end
  7147.         else
  7148.             lib:Notification("Boat Error", "Please select a boat and location to work.", 3)
  7149.         end
  7150.     end,
  7151. })
  7152.  
  7153.  
  7154.  
  7155. BoatOptions:AddButton({
  7156.     Title = "Despawn Boat",
  7157.     Variant = "Primary",
  7158.     Callback = function()
  7159.         local player = services.Players.LocalPlayer
  7160.         local activeBoat = workspace.active.boats:FindFirstChild(player.Name)
  7161.  
  7162.         if activeBoat then
  7163.             services.ReplicatedStorage.packages.Net["RE/Boats/Despawn"]:FireServer()
  7164.         else
  7165.             lib:Notification("Boat Error", "No Active Boat Found!", 3)
  7166.         end
  7167.     end,
  7168. })
  7169.  
  7170. BoatOptions:AddButton({
  7171.     Title = "Spawn Boat Near you",
  7172.     Variant = "Primary",
  7173.     Callback = function()
  7174.         local selectedBoatName = genv.SelectedBoatSpawn
  7175.         local selectedBoatLocation = "Moosewood"
  7176.  
  7177.         if selectedBoatName and selectedBoatLocation then
  7178.             local boatData = BoatsDataSheet[selectedBoatLocation]
  7179.  
  7180.             if boatData then
  7181.                 if boatData.Loaded then
  7182.                     boatData.remote()
  7183.                     task.wait()
  7184.                     services.Players.LocalPlayer.PlayerGui.hud.safezone.backpack.Visible = true
  7185.                     services.Players.LocalPlayer.PlayerGui.hud.safezone.shipwright.Visible = false
  7186.                     services.ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RF/Boats/Spawn"):InvokeServer(selectedBoatName)
  7187.                 else
  7188.                     local coords = boatData.Coords
  7189.                     local player = game.Players.LocalPlayer
  7190.                     local position = Vector3.new(unpack(coords))
  7191.                     player:RequestStreamAroundAsync(position)
  7192.                     local path = loadstring("return " .. boatData.Path)()
  7193.                     path.ModelStreamingMode = Enum.ModelStreamingMode.Persistent
  7194.                     prompt(path)
  7195.                     task.wait()
  7196.                     boatData.remote()
  7197.                     task.wait()
  7198.                     services.Players.LocalPlayer.PlayerGui.hud.safezone.backpack.Visible = true
  7199.                     services.Players.LocalPlayer.PlayerGui.hud.safezone.shipwright.Visible = false
  7200.                     services.ReplicatedStorage:WaitForChild("packages"):WaitForChild("Net"):WaitForChild("RF/Boats/Spawn"):InvokeServer(selectedBoatName)
  7201.                     boatData.Loaded = true
  7202.                 end
  7203.                 local playerBoat = game:GetService("Workspace"):WaitForChild("active"):WaitForChild("boats"):WaitForChild(services.Players.LocalPlayer.Name):FindFirstChildOfClass("Model")
  7204.                 if playerBoat and playerBoat:FindFirstChild("Base") then
  7205.                     local playerPosition = game.Players.LocalPlayer.Character.HumanoidRootPart.Position
  7206.                     local direction = Vector3.new(0, -1, 0) -- Downward ray to find ground
  7207.                     local distance = 20 -- Raycast distance
  7208.                     local ignoreList = {playerBoat, game.Players.LocalPlayer.Character} -- Ignore the boat and player
  7209.                     local rayOrigin = playerPosition + Vector3.new(0, 5, -10) -- Adjust initial position to be above and behind the player
  7210.  
  7211.                     -- Find the nearest safe position
  7212.                     local hit, hitPosition = game.Workspace:FindPartOnRayWithIgnoreList(Ray.new(rayOrigin, direction * distance), ignoreList)
  7213.  
  7214.                     if hit then
  7215.                         -- Adjust position slightly above the ground to avoid embedding
  7216.                         local safePosition = hitPosition + Vector3.new(0, playerBoat.Base.Size.Y / 2, 0)
  7217.                         playerBoat.Base.CFrame = CFrame.new(safePosition)
  7218.                     else
  7219.                         lib:Notification("Boat Error", "Could not find a safe place to spawn the boat.", 3)
  7220.                     end
  7221.                 end
  7222.             else
  7223.                 lib:Notification("Boat Error", "Invalid boat selected.", 3)
  7224.             end
  7225.         else
  7226.             lib:Notification("Boat Error", "Please select a boat and location to work.", 3)
  7227.         end
  7228.     end,
  7229. })
  7230.  
  7231.  
  7232. sections.Misc4:AddTextbox({
  7233.     Title = "Custom Coords Boat TP",
  7234.     Default = "",
  7235.     Description = "",
  7236.     PlaceHolder = "Enter Coords | Example: 1234,128,1239",
  7237.     TextDisappear = true,
  7238.     Callback = function(Vector)
  7239.         local function stringToVector3(inputString)
  7240.             inputString = inputString:gsub("%s+", "")
  7241.             local xStr, yStr, zStr = inputString:match("([^,]+),([^,]+),([^,]+)")
  7242.             local x = tonumber(xStr)
  7243.             local y = tonumber(yStr)
  7244.             local z = tonumber(zStr)
  7245.             if x and y and z then
  7246.                 return Vector3.new(x, y, z)
  7247.             else
  7248.                 error("Invalid input: Please enter values in the format 'X, Y, Z'")
  7249.             end
  7250.         end
  7251.  
  7252.         local playerBoat = game:GetService('Workspace'):WaitForChild("active"):WaitForChild("boats"):WaitForChild(services.Players.LocalPlayer.Name):FindFirstChildOfClass("Model")
  7253.         if playerBoat then
  7254.             local owner = playerBoat:FindFirstChild("owner")
  7255.             if owner then
  7256.                 local sitPrompt = owner:FindFirstChild("sitprompt")
  7257.                 if sitPrompt and sitPrompt.Enabled then
  7258.                     fireproximityprompt(sitPrompt)
  7259.                     task.wait()
  7260.                     local planePart = playerBoat:FindFirstChild("PlanePart")
  7261.                     if planePart then
  7262.                         local planeConstraint = planePart:FindFirstChild("PlaneConstraint")
  7263.                         if planeConstraint then
  7264.                             planeConstraint.Enabled = false
  7265.                         end
  7266.                     end
  7267.                     playerBoat.Base.CFrame = CFrame.new(stringToVector3(Vector))
  7268.                 elseif sitPrompt and sitPrompt.Enabled == false then
  7269.                     local planePart = playerBoat:FindFirstChild("PlanePart")
  7270.                     if planePart then
  7271.                         local planeConstraint = planePart:FindFirstChild("PlaneConstraint")
  7272.                         if planeConstraint then
  7273.                             planeConstraint.Enabled = false
  7274.                         end
  7275.                     end
  7276.                     playerBoat.Base.CFrame = CFrame.new(stringToVector3(Vector))
  7277.                 end
  7278.             end
  7279.         end
  7280.     end
  7281. })
  7282.  
  7283. sections.Misc4:AddDropdown("", {
  7284.     Title = "Perfered Boat TP Spots",
  7285.     Description = "",
  7286.     Options = genv.TpSpotsName,
  7287.     Default = "",
  7288.     PlaceHolder = "Select Spot",
  7289.     Multiple = false,
  7290.     Callback = function(selectedArea)
  7291.         _G.TPSpots = workspace.world.spawns.TpSpots:FindFirstChild(selectedArea)
  7292.        
  7293.         if _G.TPSpots then
  7294.             local playerBoat = game:GetService('Workspace'):WaitForChild("active"):WaitForChild("boats"):WaitForChild(services.Players.LocalPlayer.Name):FindFirstChildOfClass("Model")
  7295.         if playerBoat then
  7296.             local owner = playerBoat:FindFirstChild("owner")
  7297.             if owner then
  7298.                 local sitPrompt = owner:FindFirstChild("sitprompt")
  7299.                 if sitPrompt and sitPrompt.Enabled then
  7300.                     fireproximityprompt(sitPrompt)
  7301.                     task.wait()
  7302.                     local planePart = playerBoat:FindFirstChild("PlanePart")
  7303.                     if planePart then
  7304.                         local planeConstraint = planePart:FindFirstChild("PlaneConstraint")
  7305.                         if planeConstraint then
  7306.                             planeConstraint.Enabled = false
  7307.                         end
  7308.                     end
  7309.                     playerBoat.Base.CFrame = CFrame.new(_G.TPSpots.Position.X,_G.TPSpots.Position.Y,_G.TPSpots.Position.Z)
  7310.                 elseif sitPrompt and sitPrompt.Enabled == false then
  7311.                     local planePart = playerBoat:FindFirstChild("PlanePart")
  7312.                     if planePart then
  7313.                         local planeConstraint = planePart:FindFirstChild("PlaneConstraint")
  7314.                         if planeConstraint then
  7315.                             planeConstraint.Enabled = false
  7316.                         end
  7317.                     end
  7318.                     playerBoat.Base.CFrame = CFrame.new(_G.TPSpots.Position.X,_G.TPSpots.Position.Y,_G.TPSpots.Position.Z)
  7319.                 end
  7320.             end
  7321.         end
  7322.         end
  7323.     end
  7324. })
  7325.  
  7326. local BoatSettings = {
  7327.     ["Max Speed"] = 0,
  7328.     ["Turning Speed"] = 0,
  7329.     ["Acceleration"] = 0,
  7330. }
  7331.  
  7332. if require then
  7333.     sections.Misc4:AddSlider("BoatMaxSpeed", {
  7334.         Title = "Boat Max Speed",
  7335.         Description = "Change Boat Speed",
  7336.         Default = 1,
  7337.         Min = 0,
  7338.         Max = 1000,
  7339.         Increment = 1,
  7340.         Callback = function(value)
  7341.             BoatSettings["Max Speed"] = value
  7342.         end,
  7343.     })
  7344.     genv.UseMaxSpeed = false
  7345.     sections.Misc4:AddToggle('', {
  7346.         Title = 'Use Max Speed',
  7347.         Description = "Use Custom Max Speed",
  7348.         Default = false,
  7349.         Callback = function(Value)
  7350.             genv.UseMaxSpeed = Value
  7351.             local vesselsModule = require(services.ReplicatedStorage.modules.vessels)
  7352.             if genv.UseMaxSpeed then
  7353.                 for boat, Properties in next, vesselsModule.library do
  7354.                     Properties.MaxSpeed = BoatSettings["Max Speed"]
  7355.                 end
  7356.             else
  7357.                 for boat, Properties in next, vesselsModule.library do
  7358.                     if data.Boats[boat] then
  7359.                         Properties.MaxSpeed = tonumber(data.Boats[boat].MaxSpeed)
  7360.                     end
  7361.                 end
  7362.             end
  7363.         end,
  7364.     })
  7365.  
  7366.     sections.Misc4:AddSlider("TurningSpeed", {
  7367.     Title = "Boat Turning Speed",
  7368.     Description = "Change Turning Speed",
  7369.     Default = 1,
  7370.     Min = 0,
  7371.     Max = 100,
  7372.     Increment = 1,
  7373.     Callback = function(value)
  7374.         BoatSettings["Turning Speed"] = value
  7375.     end,
  7376.     })
  7377.  
  7378.     genv.UseTurningSpeed = false
  7379.     sections.Misc4:AddToggle('', {
  7380.         Title = 'Use Turning Speed',
  7381.         Description = "Use Custom Turning Speed",
  7382.         Default = false,
  7383.         Callback = function(Value)
  7384.             genv.UseTurningSpeed = Value
  7385.             local vesselsModule = require(services.ReplicatedStorage.modules.vessels)
  7386.             if genv.UseTurningSpeed then
  7387.                 for boat, Properties in next, vesselsModule.library do
  7388.                     Properties.TurningSpeed  = BoatSettings["Turning Speed"]
  7389.                 end
  7390.             else
  7391.                 for boat, Properties in next, vesselsModule.library do
  7392.                     if data.Boats[boat] then
  7393.                         Properties.TurningSpeed  = tonumber(data.Boats[boat].TurningSpeed)
  7394.                     end
  7395.                 end
  7396.             end
  7397.         end,
  7398.     })
  7399.  
  7400.     sections.Misc4:AddSlider("BoatAcceleration ", {
  7401.     Title = "Boat Acceleration",
  7402.     Description = "Change Actual Boat Speed",
  7403.     Default = 1,
  7404.     Min = 0,
  7405.     Max = 500,
  7406.     Increment = 1,
  7407.     Callback = function(value)
  7408.         BoatSettings["Acceleration"] = value
  7409.     end,
  7410.     })
  7411.  
  7412.     genv.UseAcceleration = false
  7413.     sections.Misc4:AddToggle('', {
  7414.         Title = 'Use Acceleration',
  7415.         Description = "Use Custom Acceleration",
  7416.         Default = false,
  7417.         Callback = function(Value)
  7418.             genv.UseAcceleration = Value
  7419.             local vesselsModule = require(services.ReplicatedStorage.modules.vessels)
  7420.             if genv.UseAcceleration then
  7421.                 for boat, Properties in next, vesselsModule.library do
  7422.                     Properties.Accel  = BoatSettings["Acceleration"]
  7423.                 end
  7424.             else
  7425.                 for boat, Properties in next, vesselsModule.library do
  7426.                     if data.Boats[boat] then
  7427.                         Properties.Accel  = tonumber(data.Boats[boat].Acceleration)
  7428.                     end
  7429.                 end
  7430.             end
  7431.         end,
  7432.     })
  7433. end
  7434.  
  7435.  
  7436. -- local dupe = { Connections = {} }
  7437. -- sections.Misc5:AddToggle('Toggle', {
  7438. --     Title = 'Fish Dupe',
  7439. --     Description = "The more you have, the quicker it'll be. The dupe is very unstable, experiment on your own, try different servers, fishes, etc.",
  7440. --     Default = false,
  7441. --     Callback = function(Value)
  7442. --         if Value then
  7443.  
  7444. --             local fish = services.Players.LocalPlayer.Character:FindFirstChildOfClass('Tool')
  7445. --             if not fish:FindFirstChild('link') or not fish.link.Value or not fish.link.Value:IsDescendantOf(game) or not fish:FindFirstChild('fishscript') then
  7446. --                 lib:Notification("Fish Dupe","You are not holding a valid item.",1.5)
  7447. --                 return
  7448. --             end
  7449. --             local fishname = fish.Name
  7450.  
  7451. --             lib:Notification("Fish Dupe",'Targetting ' .. fishname .. '.',1.5)
  7452.  
  7453. --             if ReplicatedStorage.events:FindFirstChild('anno_thought') then
  7454. --                 ReplicatedStorage.events.anno_thought:Destroy()
  7455. --                 Instance.new("RemoteEvent", ReplicatedStorage.events).Name = "anno_thought"
  7456. --             end
  7457.  
  7458. --             dupe.Connections.DupeConnection2 = RunService.RenderStepped:Connect((function()
  7459.  
  7460. --                 task.spawn(function()
  7461. --                     pcall(function()
  7462. --                         workspace.world.npcs.Appraiser.appraiser.appraise:InvokeServer()
  7463. --                     end)
  7464. --                 end)
  7465.  
  7466. --                 --local fish = LocalPlayer.Backpack:FindFirstChild(fishname) or Character:FindFirstChild(fishname)
  7467. --                 local fish; do
  7468. --                     --fish = LocalPlayer.Backpack:FindFirstChild(fishname) or Character:FindFirstChild(fishname)
  7469.  
  7470. --                     if not fish then
  7471. --                         for i,v in LocalPlayer.Backpack:GetChildren() do
  7472. --                             if not v or v.Name ~= fishname or not v:FindFirstChild('link') or not v.link.Value or not v.link.Value:IsDescendantOf(game) or not v:FindFirstChild('fishscript') then
  7473. --                                 continue
  7474. --                             end
  7475.  
  7476. --                             fish = v
  7477. --                             break
  7478. --                         end
  7479. --                     end
  7480. --                 end
  7481.  
  7482. --                 if fish then
  7483. --                     print('Dupe', fish.Name)
  7484. --                     fish.Parent = services.Players.LocalPlayer.character
  7485. --                 else
  7486. --                     print('No fish found')
  7487. --                     services.Players.LocalPlayer.character.Humanoid:UnequipTools()
  7488. --                     for i,v in services.Players.LocalPlayer.character:GetChildren() do
  7489. --                         if v:IsA('Tool') then
  7490. --                             v.Parent = LocalPlayer.Backpack
  7491. --                         end
  7492. --                     end
  7493. --                 end
  7494.  
  7495. --             end))
  7496.  
  7497.  
  7498. --         else
  7499.  
  7500. --             if dupe.Connections.DupeConnection2 then
  7501. --                 dupe.Connections.DupeConnection2:Disconnect()
  7502. --                 dupe.Connections.DupeConnection2 = nil
  7503. --             end
  7504.  
  7505. --             if dupe.Connections.DupeConnection3 then
  7506. --                 dupe.Connections.DupeConnection3:Disconnect()
  7507. --                 dupe.Connections.DupeConnection3 = nil
  7508. --             end
  7509.  
  7510. --             for i,v in services.Players.LocalPlayer.character:GetChildren() do
  7511. --                 if v:IsA('Tool') then
  7512. --                     v.Parent = LocalPlayer.Backpack
  7513. --                 end
  7514. --             end
  7515.  
  7516. --         end
  7517. --     end
  7518. -- })
  7519.  
  7520. -- local DupeFishGroupButton = sections.Misc5:AddGroupButton()
  7521.  
  7522. -- function DestroyGhostDupe()
  7523. --     local Players = services.Players
  7524. --     local ReplicatedStorage = services.ReplicatedStorage
  7525.  
  7526. --     local LocalPlayer = Players.LocalPlayer
  7527. --     local PlayerGui = LocalPlayer.PlayerGui
  7528. --     local hud = PlayerGui:FindFirstChild("hud")
  7529. --     local safezone = hud and hud:FindFirstChild("safezone")
  7530. --     local backpack = safezone and safezone:FindFirstChild("backpack")
  7531. --     local inventory = backpack and backpack:FindFirstChild("inventory")
  7532. --     local scroll = inventory and inventory:FindFirstChild("scroll")
  7533. --     local playerInventory = ReplicatedStorage:WaitForChild("playerstats")[LocalPlayer.Name]:WaitForChild("Inventory")
  7534.  
  7535. --     if scroll then
  7536. --         for _, child in pairs(scroll:GetChildren()) do
  7537. --             if child:FindFirstChild("item") then
  7538. --                 local itemValue = tostring(child.item.Value)
  7539. --                 if not playerInventory:FindFirstChild(itemValue) then
  7540. --                     child:Destroy()
  7541. --                 end
  7542. --             end
  7543. --         end
  7544. --     end
  7545. -- end
  7546.  
  7547. -- DupeFishGroupButton:AddButton({
  7548. --     Title = "Delete Ghost Items",
  7549. --     Variant = "Primary",
  7550. --     Callback = function()
  7551. --         DestroyGhostDupe()
  7552. --     end,
  7553. -- })
  7554.  
  7555. -- DupeFishGroupButton:AddButton({
  7556. --     Title = "Create Safe Zone",
  7557. --     Variant = "Primary",
  7558. --     Callback = function()
  7559. --         local SafeZone = Instance.new("Part")
  7560. --         SafeZone.Size = Vector3.new(15, 1, 15)
  7561. --         SafeZone.Position = Vector3.new(math.random(-2000,2000), math.random(50000,90000), math.random(-2000,2000))
  7562. --         SafeZone.Anchored = true
  7563. --         SafeZone.BrickColor = BrickColor.new("Royal purple")
  7564. --         SafeZone.Material = Enum.Material.ForceField
  7565. --         SafeZone.Parent = game.Workspace
  7566. --         LocalPlayer.Character.HumanoidRootPart.CFrame = SafeZone.CFrame + Vector3.new(0, 5, 0)
  7567. --         lib:Notification("Safezone", "You need to use teleports to go back.", 7)
  7568. --     end,
  7569. -- })
  7570.  
  7571. -- DupeFishGroupButton:AddButton({
  7572. --     Title = "Copy Tutorial Video Link",
  7573. --     Variant = "Outline",
  7574. --     Callback = function()
  7575. --         setclipboard("https://youtu.be/Axq0W7sOAFc")
  7576. --         lib:Notification("Tutorial","Copied link to clipboard, just paste it.", 5)
  7577. --     end,
  7578. -- })
  7579.  
  7580. --[[3itx Made this]]--
  7581.  
  7582. -- Function to grab and format the playtime
  7583. local function grabPlayTime()
  7584.     local seconds = PlayerStats.tracker_timeplayed.Value or 0  -- Grab the playtime (in seconds)
  7585.  
  7586.     -- Convert seconds to days, hours, minutes, seconds
  7587.     local days = math.floor(seconds / 86400)  -- 1 day = 86400 seconds
  7588.     local hours = math.floor((seconds % 86400) / 3600)  -- 1 hour = 3600 seconds
  7589.     local minutes = math.floor((seconds % 3600) / 60)  -- 1 minute = 60 seconds
  7590.     local remainingSeconds = math.floor(seconds % 60)  -- Remaining seconds
  7591.  
  7592.     -- Construct the formatted string
  7593.     local timeString = ""
  7594.     if days > 0 then
  7595.         timeString = timeString .. days .. "d "
  7596.     end
  7597.     if hours > 0 then
  7598.         timeString = timeString .. hours .. "h "
  7599.     end
  7600.     if minutes > 0 then
  7601.         timeString = timeString .. minutes .. "m "
  7602.     end
  7603.     if remainingSeconds > 0 or (days == 0 and hours == 0 and minutes == 0) then
  7604.         timeString = timeString .. remainingSeconds .. "s"
  7605.     end
  7606.  
  7607.     return timeString
  7608. end
  7609.  
  7610.  
  7611. genv.WebhookURL = nil
  7612. local UseProxy = false
  7613. local EmbedColor = nil
  7614. local EditDelay = 60
  7615. function color3ToHex(color)
  7616.     local r = math.floor(color.R * 255)
  7617.     local g = math.floor(color.G * 255)
  7618.     local b = math.floor(color.B * 255)
  7619.     return string.format("#%02X%02X%02X", r, g, b)
  7620. end
  7621.  
  7622. function processFishingZones()
  7623.     local names = {}
  7624.    
  7625.     for _, child in pairs(workspace.zones.fishing:GetChildren()) do
  7626.         if child:FindFirstChild("beacon") then
  7627.             local poiHeader = child:FindFirstChild("POIHeader")
  7628.             if poiHeader and poiHeader:FindFirstChild("title") and poiHeader.title:IsA("TextLabel") then
  7629.                 local titleText = poiHeader.title.Text
  7630.                 table.insert(names, titleText)
  7631.             end
  7632.         end
  7633.        
  7634.         local abundance = child:FindFirstChild("Abundance")
  7635.         if abundance and abundance:FindFirstChild("Chance") and abundance:FindFirstChild("Mutation") then
  7636.             table.insert(names, child.Name)
  7637.         end
  7638.     end
  7639.  
  7640.     if #names == 0 then
  7641.         return "none"
  7642.     end
  7643.  
  7644.     local nameCount = {}
  7645.     for _, name in ipairs(names) do
  7646.         nameCount[name] = (nameCount[name] or 0) + 1
  7647.     end
  7648.  
  7649.     local result = {}
  7650.     for name, count in pairs(nameCount) do
  7651.         if count > 1 then
  7652.             table.insert(result, name .. " (x" .. count..")")
  7653.         else
  7654.             table.insert(result, name)
  7655.         end
  7656.     end
  7657.  
  7658.     return table.concat(result, ", ")
  7659. end
  7660. function getServerUptime()
  7661.     local uptimeText = LocalPlayer.PlayerGui.serverInfo.serverInfo.uptime.Text
  7662.     local uptime = uptimeText:gsub("Server Uptime: ", "")
  7663.     local hours, minutes, seconds = uptime:match("(%d+):(%d+):(%d+)")
  7664.     local formattedUptime = ""
  7665.     if hours and tonumber(hours) > 0 then
  7666.         formattedUptime = formattedUptime .. hours .. "h "
  7667.     end
  7668.     if minutes and tonumber(minutes) > 0 then
  7669.         formattedUptime = formattedUptime .. minutes .. "m "
  7670.     end
  7671.     if seconds and tonumber(seconds) > 0 then
  7672.         formattedUptime = formattedUptime .. seconds .. "s"
  7673.     end
  7674.     return formattedUptime:match("^%s*(.-)%s*$")
  7675. end
  7676.  
  7677. local HiddenMode = false
  7678. function StatusEmbed()
  7679.     function NoDiddy()
  7680.         if HiddenMode then
  7681.         return "Lunor User <3"
  7682.         else
  7683.         return "@"..LocalPlayer.DisplayName.."("..LocalPlayer.Name..")"
  7684.         end
  7685.     end
  7686.     return {
  7687.     ["title"] = tostring(NoDiddy()).." - Lunor // Fisch",
  7688.     ["description"] = "◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤\n"
  7689.     .. "**« Account Info »**\n"
  7690.     .. "🕹️ <:1036413570302345277:1320298554178273283>lvl » " .. tostring(LocalPlayer.leaderstats.Level.Value or "Error") .. "\n"
  7691.     .. "💰 <:1032398237283385364:1320297984302514206>C$ » " .. tostring(LocalPlayer.leaderstats["C$"].Value or "Error") .. "\n"
  7692.     .. "🔥 <:1032398237283385364:1320297984302514206>Streak » " .. (function()
  7693.         local streak = PlayerStats.tracker_streak.Value
  7694.         if tonumber(streak) then
  7695.             return formatNumber(tonumber(streak))
  7696.         else
  7697.             return "Error"
  7698.         end
  7699.     end)() .. "\n"    
  7700.     .. "🎣 <:1032398237283385364:1320297984302514206>Equipped Rod » " .. tostring(PlayerStats.rod.Value or "Error") .. "\n"
  7701.     .. "🌏 <:1032398237283385364:1320297984302514206>Location » " .. tostring(character.zone.Value or "Error") .. "\n"
  7702.     -- .. "✨ <:1032398237283385364:1320297984302514206>XP » " .. tostring(PlayerStats.xp.Value or "Error") .. "\n" -- it just looks bad no offense
  7703.     .. "📦 <:1032398237283385364:1320297984302514206>Bait » " .. (function()
  7704.         local sum = 0
  7705.         local baitStats = ReplicatedStorage.playerstats[LocalPlayer.Name].Stats.bait
  7706.         for _, v in ipairs(baitStats:GetChildren()) do
  7707.             sum += tonumber(v.Value) or 0
  7708.         end
  7709.         return formatNumber(sum) or "Error"
  7710.     end)() .. "\n"    
  7711.     .. "🐟 <:1032398237283385364:1320297984302514206>Total Caught » " .. (function()
  7712.         local fishCaught = PlayerStats.tracker_fishcaught.Value
  7713.         if tonumber(fishCaught) then
  7714.             return formatNumber(tonumber(fishCaught))
  7715.         else
  7716.             return "Error"
  7717.         end
  7718.     end)() .. "\n"    
  7719.     .. "🎒 <:1032398237283385364:1320297984302514206>Inventory Value » " .. tostring(calculateInventoryValue() or "Error") .. "\n"
  7720.     .. "⌛ <:10364135703023452772:1320300405632270356>Time Played » " .. grabPlayTime() .. "\n\n"
  7721.     .. "**« Server Info »**\n"
  7722.     .. "🌧️ <:1036413570302345277:1320298554178273283>Weather » " .. tostring(ReplicatedStorage.world.weather.Value or "Error") .. "\n"
  7723.     .. "🌥️ <:1032398237283385364:1320297984302514206>Time » " .. tostring(ReplicatedStorage.world.cycle.Value or "Error") .. "\n"
  7724.     .. "🌿 <:1032398237283385364:1320297984302514206>Season » " .. tostring(ReplicatedStorage.world.season.Value or "Error") .. "\n"
  7725.     .. "🌆 <:1032398237283385364:1320297984302514206>Event » " .. tostring(ReplicatedStorage.world.event.Value or "Error") .. "\n"
  7726.     .. "🦈 <:1032398237283385364:1320297984302514206>Event Fish » " .. tostring(processFishingZones() or "Error") .. "\n"
  7727.     .. "🕓 <:1032398237283385364:1320297984302514206>Server Uptime » " .. tostring(getServerUptime() or "Error") .. "\n"
  7728.     .. "📍 <:1032398237283385364:1320297984302514206>Server Location » "
  7729.         .. tostring(ReplicatedStorage:WaitForChild("world"):WaitForChild("region_country").Value or "Error") .. ", "
  7730.         .. tostring(ReplicatedStorage:WaitForChild("world"):WaitForChild("region_region").Value or "Error") .. ", "
  7731.         .. tostring(ReplicatedStorage:WaitForChild("world"):WaitForChild("region_city").Value or "Error") .. "\n"
  7732.     .. "🍚 <:1032398237283385364:1320297984302514206>Version » " .. tostring(ReplicatedStorage:WaitForChild("world"):WaitForChild("version").Value or "Error") .. "\n"
  7733.     .. "👥 <:10364135703023452772:1320300405632270356>Players » " .. tostring(#Players:GetPlayers() or "Error") .. "\n"
  7734.     .. "◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤◢◤\n"
  7735.     .. "-# Updating in <t:" .. tostring((os.time() + (EditDelay or 0)) or "Error") .. ":R>",
  7736.     ["color"] = discordColor,
  7737.     ["thumbnail"] = {["url"] = "https://you.whimper.xyz/sources/lunor/e-z/nfamu2z5i9b88fitmk.png"}
  7738.     }
  7739. end
  7740. function StoppedEmbed()
  7741.     return {
  7742.         ["title"] = "Webhook Has Been Stopped :skull:",
  7743.         ["description"] = "```ansi\n" ..
  7744.                           "Thanks for using Lunor Webhook's\n" ..
  7745.                           "```",
  7746.         ["color"] = 16711680, -- This color is for the embed border
  7747.         ["thumbnail"] = {
  7748.             ["url"] = "https://you.whimper.xyz/sources/lunor/e-z/nfamu2z5i9b88fitmk.png"
  7749.         }
  7750.     }
  7751. end
  7752.  
  7753. local function checkWebhook(url)
  7754.     local success, response = pcall(function()
  7755.         return request({
  7756.             Url = url,
  7757.             Method = "GET"
  7758.         })
  7759.     end)
  7760.  
  7761.     if not success then
  7762.         print("An error occurred: " .. tostring(response))
  7763.         return false
  7764.     else
  7765.         if response.StatusCode == 200 then
  7766.             return true
  7767.         elseif response.StatusCode == 401 then
  7768.             return false
  7769.         else
  7770.             lib:Notification("Webhook Settings","Error has been Caught" ..response.StatusCode , 5)
  7771.             return false
  7772.         end
  7773.     end
  7774. end
  7775.  
  7776. function replaceWebhookURL(webhookLink)
  7777.     webhookLink = webhookLink:gsub("https://canary%.?", "https://"):gsub("https://ptb%.?", "https://") or webhookLink
  7778.     webhookLink = webhookLink:gsub("https://discord%.com/api/webhooks/", "https://webhook.lewisakura.moe/api/webhooks/"):gsub("https://discordapp%.com/api/webhooks/","https://webhook.lewisakura.moe/api/webhooks/")
  7779.     return webhookLink
  7780. end
  7781.  
  7782. genv.StatusWebhook = false
  7783. sections.Webhook1:AddTextbox({
  7784.     Title = "Webhook URL",
  7785.     PlaceHolder = "Insert Webhook URL",
  7786.     Default = "",
  7787.     Description = "",
  7788.     TextDisappear = true,
  7789.     Callback = function(Webhook)
  7790.         local isAlive = checkWebhook(Webhook)
  7791.         if isAlive then
  7792.             if UseProxy then
  7793.                 genv.WebhookURL = replaceWebhookURL(Webhook)
  7794.             else
  7795.                 genv.WebhookURL = Webhook
  7796.             end
  7797.         else
  7798.             lib:Notification("Webhook Settings","Webhook is not a valid Link please Provide a Valid Webhook link", 5)
  7799.         end
  7800.     end
  7801. })
  7802. sections.Webhook1:AddToggle("UseProxy", {
  7803.     Title = "Use Proxy",
  7804.     Default = true,
  7805.     Description = "",
  7806.     Callback = function(isEnabled)
  7807.     UseProxy = isEnabled
  7808.     end
  7809. })
  7810.  
  7811. sections.Webhook2:AddColorpicker("EmbedColor", {
  7812.     Title = "Embed Color",
  7813.     Default = Color3.fromRGB(208, 157, 255),
  7814.     Callback = function(selectedColor)
  7815.         -- Extract and scale RGB values from Color3
  7816.         local red = math.floor(selectedColor.R * 255)
  7817.         local green = math.floor(selectedColor.G * 255)
  7818.         local blue = math.floor(selectedColor.B * 255)
  7819.        
  7820.         -- Convert to Discord embed color format
  7821.         discordColor = red * 65536 + green * 256 + blue
  7822.        
  7823.         -- Print the formatted color
  7824.         -- print("Discord Embed Color:", discordColor)
  7825.     end,
  7826. })
  7827.  
  7828.  
  7829. sections.Webhook2:AddTextbox({
  7830.     Title = "Edit Embed Delay (s)",
  7831.     Default = "",
  7832.     Description = "",
  7833.     PlaceHolder = "Insert a Delay",
  7834.     TextDisappear = false,
  7835.     Callback = function(Delay)
  7836.         EditDelay = Delay
  7837.     end
  7838. })
  7839.  
  7840. sections.Webhook2:AddToggle("HiddenToggle", {
  7841.     Title = "Hide from the Feds",
  7842.     Default = false,
  7843.     Description = "Won't show your name in the webhook message.",
  7844.     Callback = function(isEnabled)
  7845.     HiddenMode = isEnabled
  7846.     end
  7847. })
  7848.  
  7849. local function sendWebhook()
  7850.     local data = {
  7851.         ["content"] = "",
  7852.         ["embeds"] = {StatusEmbed()}
  7853.     }
  7854.  
  7855.     local jsonData = HttpService:JSONEncode(data)
  7856.  
  7857.     local headers = {
  7858.         ["content-type"] = "application/json"
  7859.     }
  7860.  
  7861.     local response = request({
  7862.         Url = genv.WebhookURL .. "?wait=true",
  7863.         Method = "POST",
  7864.         Headers = headers,
  7865.         Body = jsonData
  7866.     })
  7867.  
  7868.     if response.StatusCode == 200 then
  7869.         local responseBody = HttpService:JSONDecode(response.Body)
  7870.         local messageId = responseBody.id
  7871.         print("Message ID:", messageId)
  7872.  
  7873.         return messageId
  7874.     else
  7875.         print("Error sending webhook message:", response.StatusCode, response.StatusMessage)
  7876.         return nil
  7877.     end
  7878. end
  7879.  
  7880. local function sendStoppedEmbed(messageId)
  7881.     local stoppedData = {
  7882.         ["embeds"] = {StoppedEmbed()}
  7883.     }
  7884.     local stoppedJsonData = HttpService:JSONEncode(stoppedData)
  7885.  
  7886.     local headers = {
  7887.         ["content-type"] = "application/json"
  7888.     }
  7889.  
  7890.     local stoppedResponse = request({
  7891.         Url = genv.WebhookURL .. "/messages/" .. messageId,
  7892.         Method = "PATCH",
  7893.         Headers = headers,
  7894.         Body = stoppedJsonData
  7895.     })
  7896.  
  7897.     if stoppedResponse.StatusCode == 200 then
  7898.         print("Webhook stopped message sent successfully!")
  7899.     else
  7900.         print("Error sending stopped message:", stoppedResponse.StatusCode, stoppedResponse.StatusMessage)
  7901.     end
  7902. end
  7903.  
  7904. local function editWebhook(messageId)
  7905.     while genv.StatusWebhook do
  7906.         task.wait(EditDelay)
  7907.  
  7908.         local data = {
  7909.             ["embeds"] = {StatusEmbed()}
  7910.         }
  7911.  
  7912.         local jsonData = HttpService:JSONEncode(data)
  7913.  
  7914.         local headers = {
  7915.             ["content-type"] = "application/json"
  7916.         }
  7917.  
  7918.         local editResponse = request({
  7919.             Url = genv.WebhookURL .. "/messages/" .. messageId,
  7920.             Method = "PATCH",
  7921.             Headers = headers,
  7922.             Body = jsonData
  7923.         })
  7924.  
  7925.         if editResponse.StatusCode == 200 then
  7926.             print("Message edited successfully!")
  7927.         else
  7928.             print("Error editing message:", editResponse.StatusCode, editResponse.StatusMessage)
  7929.         end
  7930.     end
  7931.     sendStoppedEmbed(messageId)
  7932. end
  7933.  
  7934. sections.Webhook3:AddToggle("StartStatusWebhook", {
  7935.     Title = "Start Status",
  7936.     Default = false,
  7937.     Description = "",
  7938.     Callback = function(isEnabled)
  7939.         genv.StatusWebhook = isEnabled
  7940.         if isEnabled then
  7941.             local messageId = sendWebhook()
  7942.             if messageId then
  7943.                 editWebhook(messageId)
  7944.             end
  7945.         else
  7946.             genv.StatusWebhook = false
  7947.         end
  7948.     end
  7949. })
  7950.  
  7951. local playerName = LocalPlayer.Name
  7952. local playerStats = ReplicatedStorage:WaitForChild("playerstats"):WaitForChild(playerName)
  7953. local inventory = playerStats:WaitForChild("Inventory")
  7954. local data1 = loadstring(game:HttpGet("https://raw.githubusercontent.com/Catto-YFCN/GoofyData/refs/heads/main/DataFishOnly"))()
  7955. local data2 = loadstring(game:HttpGet("https://raw.githubusercontent.com/Catto-YFCN/GoofyData/refs/heads/main/FishImages"))()
  7956.  
  7957. genv.lol = false
  7958. local connections = {} -- To store connections for cleanup
  7959.  
  7960. local function createWebhookEmbed(title, description, imageURL, thumbnailURL)
  7961.     return {
  7962.         ["title"] = title,
  7963.         ["description"] = description,
  7964.         ["color"] = 0,
  7965.         ["image"] = { ["url"] = imageURL },
  7966.         ["thumbnail"] = { ["url"] = thumbnailURL }
  7967.     }
  7968. end
  7969.  
  7970.  
  7971. local function sendWebhook2(embed)
  7972.     local data = {
  7973.         ["content"] = "",
  7974.         ["embeds"] = { embed }
  7975.     }
  7976.     local jsonData = HttpService:JSONEncode(data)
  7977.     local headers = { ["content-type"] = "application/json" }
  7978.  
  7979.     local response = request({
  7980.         Url = genv.WebhookURL,
  7981.         Method = "POST",
  7982.         Headers = headers,
  7983.         Body = jsonData
  7984.     })
  7985.  
  7986.     print("Webhook sent with status:", response.StatusCode)
  7987. end
  7988.  
  7989.  
  7990. local function onValueChanged(value)
  7991.     if not value or not value:IsA("ValueBase") then
  7992.         print("Error: Invalid value detected:", tostring(value))
  7993.         return
  7994.     end
  7995.  
  7996.     local parent = value.Parent
  7997.     if not parent then
  7998.         print("Error: Parent not found for value:", value.Name)
  7999.         return
  8000.     end
  8001.     task.wait()
  8002.     local description = "<:1036413570302345277:1320298554178273283> **Fish Name:** " .. parent.Name:gsub("%d", "") .. "\n"
  8003.     for _, child in ipairs(parent:GetChildren()) do
  8004.         if child:IsA("ValueBase") or child:IsA("BoolValue") then
  8005.             description = description .. "<:1032398237283385364:1320297984302514206> **" .. child.Name .. ":** " .. tostring(child.Value) .. "\n"
  8006.         end
  8007.     end
  8008.     description = description .. "<:1032398237283385364:1320297984302514206> ** Rarity ** : " .. tostring(data1.Fish[tostring(parent.Name:gsub("%d", ""))].Rarity or "Unknown") .. "\n" .. "<:10364135703023452772:1320300405632270356> **Total Price** : " .. tostring(GetBackPackItemValue(parent.Name)) .. "\n**Showcase Image:**"
  8009.  
  8010.     local embed = createWebhookEmbed(
  8011.         "Lunor Auto Catcher Notifier",
  8012.         description,
  8013.         tostring(data2.ImageLinks[tostring(parent.Name:gsub("%d", ""))].Link) or "https://stablepoint.com/assets/uploads/images/blog/503-image1.jpg?v=1636710553",
  8014.         "https://you.whimper.xyz/sources/lunor/e-z/nfamu2z5i9b88fitmk.png"
  8015.     )
  8016.     sendWebhook2(embed)
  8017. end
  8018.  
  8019. local function monitorItem(item)
  8020.     if not genv.lol then return end
  8021.    
  8022.     -- Monitor the item itself if it's a ValueBase
  8023.     if item:IsA("ValueBase") then
  8024.         local connection = item.Changed:Connect(function()
  8025.             if not genv.lol then
  8026.                 connection:Disconnect()
  8027.                 return
  8028.             end
  8029.             onValueChanged(item)
  8030.         end)
  8031.         table.insert(connections, connection)
  8032.     end
  8033.    
  8034.     -- Monitor all children
  8035.     for _, child in ipairs(item:GetChildren()) do
  8036.         monitorItem(child)
  8037.     end
  8038.    
  8039.     -- Monitor for new children being added
  8040.     local childAddedConnection = item.ChildAdded:Connect(function(newChild)
  8041.         if not genv.lol then
  8042.             childAddedConnection:Disconnect()
  8043.             return
  8044.         end
  8045.         monitorItem(newChild)
  8046.     end)
  8047.     table.insert(connections, childAddedConnection)
  8048. end
  8049.  
  8050.  
  8051. local function onInventoryItemAdded(newItem)
  8052.     if not genv.lol then return end
  8053.     task.wait()
  8054.     local description = "<:1036413570302345277:1320298554178273283> **Fish Name:** " .. newItem.Name:gsub("%d", "") .. "\n"
  8055.     for _, child in ipairs(newItem:GetChildren()) do
  8056.         if child:IsA("ValueBase") or child:IsA("BoolValue") then
  8057.             description = description .. "<:1032398237283385364:1320297984302514206> **" .. child.Name .. ":** " .. tostring(child.Value) .. "\n"
  8058.         end
  8059.     end
  8060.     description = description .. "<:1032398237283385364:1320297984302514206> ** Rarity ** : " .. tostring(data1.Fish[tostring(newItem.Name:gsub("%d", ""))].Rarity or "Not Found") .. "\n" .. "<:10364135703023452772:1320300405632270356> **Total Price** : " .. tostring(GetBackPackItemValue(newItem.Name) or "Not Found") .. "\n**Showcase Image:**"
  8061.  
  8062.     task.wait()
  8063.     local embed = createWebhookEmbed(
  8064.         "Lunor Auto Catcher Notifier",
  8065.         description,
  8066.         tostring(data2.ImageLinks[tostring(newItem.Name:gsub("%d", ""))].Link),
  8067.         "https://you.whimper.xyz/sources/lunor/e-z/nfamu2z5i9b88fitmk.png"
  8068.     )
  8069.     sendWebhook2(embed)
  8070.     task.wait()
  8071.     for _, child in ipairs(newItem:GetChildren()) do
  8072.         if child:IsA("ValueBase") or child:IsA("BoolValue") then
  8073.             child.Changed:Connect(onValueChanged)
  8074.         end
  8075.     end
  8076. end
  8077.  
  8078. local function toggleMonitoring(isEnabled)
  8079.     genv.lol = isEnabled
  8080.  
  8081.     for _, connection in ipairs(connections) do
  8082.         if typeof(connection) == "RBXScriptConnection" then
  8083.             connection:Disconnect()
  8084.         end
  8085.     end
  8086.     table.clear(connections)
  8087.    
  8088.     if isEnabled then
  8089.         local inventoryConnection = inventory.ChildAdded:Connect(function(newItem)
  8090.             if not genv.lol then return end
  8091.             onInventoryItemAdded(newItem)
  8092.             monitorItem(newItem)
  8093.         end)
  8094.         table.insert(connections, inventoryConnection)
  8095.        
  8096.         for _, item in ipairs(inventory:GetChildren()) do
  8097.             monitorItem(item)
  8098.         end
  8099.     end
  8100. end
  8101.  
  8102. sections.Webhook3:AddToggle("", {
  8103.     Title = "Start Logging Catches",
  8104.     Default = false,
  8105.     Description = "",
  8106.     Callback = toggleMonitoring
  8107. })
  8108.  
  8109.  
  8110. coroutine.wrap(function()
  8111.     while true do
  8112.         pcall(function()
  8113.             updateAppraiseDescription()
  8114.         end)
  8115.         task.wait(1)
  8116.     end
  8117. end)()
  8118.  
  8119.  
  8120. FlagsManager:SetLibrary(lib)
  8121. FlagsManager:SetIgnoreIndexes({})
  8122. FlagsManager:SetFolder("Lunor/Fisch")
  8123. FlagsManager:InitSaveSystem(tabs.Config)
  8124.  
  8125. local themes =  tabs.Config:AddSection({Title = "Themes", Description = "if you want to create your own theme u can submit it to the offical discord server", Defualt = true , Locked = true})
  8126. local CustomThemes = {}
  8127. local StoredThemes = loadstring(game:HttpGet("https://you.whimper.xyz/sources/lunor/themes.lua"))()
  8128.  
  8129. for v,_ in pairs(StoredThemes) do
  8130. table.insert(CustomThemes, v)
  8131. end
  8132.  
  8133. themes:AddDropdown("Themes", {
  8134.     Title = "Choose Theme",
  8135.     Description = "",
  8136.     Options = CustomThemes,
  8137.     Default = "default",
  8138.     PlaceHolder = "Select Theme",
  8139.     Multiple = false,
  8140.     Callback = function(Theme)
  8141.         lib:SetTheme(Theme)
  8142.     end,
  8143. })
  8144.  
  8145. function colorToHex(color)
  8146.     local r = math.floor(color.R * 255)
  8147.     local g = math.floor(color.G * 255)
  8148.     local b = math.floor(color.B * 255)
  8149.     return string.format("%02X%02X%02X", r, g, b)
  8150. end
  8151.  
  8152. sections.Gradient:AddColorpicker("GradientStart", {
  8153.     Title = "Gradient Starting Color",
  8154.     Default = Color3.new(1.000000, 1.000000, 1.000000),
  8155.     Callback = function(selectedColor)
  8156.         startingGradient = colorToHex(selectedColor)
  8157.         print("Selected Color in Hex: " .. startingGradient)
  8158.     end,
  8159. })
  8160.  
  8161. sections.Gradient:AddColorpicker("GradientEnd", {
  8162.     Title = "Gradient Ending Color",
  8163.     Default = Color3.new(1.000000, 1.000000, 1.000000),
  8164.     Callback = function(selectedColor)
  8165.         endingGradient = colorToHex(selectedColor)
  8166.         print("Selected Color in Hex: " .. endingGradient)
  8167.     end,
  8168. })
  8169.  
  8170. sections.Gradient:AddButton({
  8171.     Title = "Copy Gradient Config",
  8172.     Variant = "Outline",
  8173.     Callback = function()
  8174.         setclipboard('getgenv().GradientColor = {\n    startingColor = "' .. startingGradient .. '",\n    endingColor = "' .. endingGradient .. '"\n}\nscript_key="Insert Lunor Key Here";\nloadstring(game:HttpGet("https://you.whimper.xyz/sources/lunor/main.lua"))()')
  8175.         lib:Notification("Gradient", "Successfully copied gradient config to clipboard.", 5)
  8176.     end,
  8177. })
Add Comment
Please, Sign In to add comment