--[[ HAZE SEAS - FRUIT ESP SCRIPT Updated with ALL fruit names from the official wiki Features: Box ESP, Name ESP, Distance ESP, Color-coded by tier --]] -- Services local Players = game:GetService("Players") local RunService = game:GetService("RunService") local CoreGui = game:GetService("CoreGui") local Camera = workspace.CurrentCamera local LocalPlayer = Players.LocalPlayer -- Settings local Settings = { Enabled = true, ShowBox = true, ShowName = true, ShowDistance = true, BoxColor = Color3.fromRGB(255, 165, 0), -- Orange TextColor = Color3.fromRGB(255, 255, 255), BoxThickness = 2, FontSize = 16, } -- ESP Storage local FruitESP = {} local Folder = Instance.new("Folder") Folder.Name = "FruitESP" Folder.Parent = CoreGui -- ALL FRUIT NAMES from the Haze Seas wiki (34 fruits) local FRUIT_NAMES = { -- Listed in order from the wiki "Wolf", "Clear", "Chop", "Spin", "Spike", "Bomb", "Barrier", "Paw", "Smoke", "Sand", "String", "Mammoth", "Buddha", "Snow", "Tremor", "Gas", "Gravity", "Flame", "Shadow", "Light", "Operation", "Ice", "Electricity", "Magma", "Love", "Gum", "Darkness", "Magnet", "Phoenix", "Soul", "Leopard", "Venom", "Dragon", "Dough", } -- Also add lowercase versions for case-insensitive matching local FRUIT_NAMES_LOWER = {} for _, name in ipairs(FRUIT_NAMES) do table.insert(FRUIT_NAMES_LOWER, name:lower()) end -- Helper Functions local function WorldToScreen(position) local screenPos, onScreen = Camera:WorldToScreenPoint(position) return Vector2.new(screenPos.X, screenPos.Y), onScreen end local function GetDistance(pos1, pos2) return (pos1 - pos2).Magnitude end -- Check if an object is a fruit local function IsFruit(object) if not object or not object:IsA("Model") then return false end local name = object.Name -- Check exact match for _, fruitName in ipairs(FRUIT_NAMES) do if name == fruitName then return true end end -- Check case-insensitive match local nameLower = name:lower() for _, fruitName in ipairs(FRUIT_NAMES_LOWER) do if nameLower == fruitName or nameLower:find(fruitName) then return true end end -- Check if name contains any fruit name for _, fruitName in ipairs(FRUIT_NAMES_LOWER) do if nameLower:find(fruitName) then return true end end return false end -- Find all fruits in workspace local function FindFruits() local fruits = {} -- Check everything in workspace local function searchFolder(folder) for _, child in ipairs(folder:GetChildren()) do if IsFruit(child) then table.insert(fruits, child) end -- Recursively search subfolders if child:IsA("Folder") or child:IsA("Model") then searchFolder(child) end end end searchFolder(workspace) return fruits end -- Drawing Functions local function CreateText() local text = Drawing.new("Text") text.Visible = false text.Size = Settings.FontSize text.Center = true text.Outline = true text.OutlineColor = Color3.fromRGB(0, 0, 0) text.Color = Settings.TextColor return text end local function CreateBox() local box = Drawing.new("Square") box.Visible = false box.Thickness = Settings.BoxThickness box.Color = Settings.BoxColor box.Filled = false return box end -- Main Update Loop RunService.RenderStepped:Connect(function() if not Settings.Enabled then return end -- Clear old ESP for _, esp in pairs(FruitESP) do if esp.Text then esp.Text.Visible = false end if esp.Box then esp.Box.Visible = false end end FruitESP = {} local fruits = FindFruits() for _, fruit in ipairs(fruits) do -- Get the root part local rootPart = fruit:FindFirstChild("HumanoidRootPart") or fruit:FindFirstChild("Head") or fruit:FindFirstChild("PrimaryPart") if not rootPart then -- Try to find any BasePart for _, child in ipairs(fruit:GetChildren()) do if child:IsA("BasePart") then rootPart = child break end end end if not rootPart then continue end local screenPos, onScreen = WorldToScreen(rootPart.Position) if not onScreen then continue end local distance = GetDistance(Camera.CFrame.Position, rootPart.Position) -- Skip if too far (optional: adjust this number) if distance > 1000 then -- Still show but maybe smaller? We'll just show all end -- Create ESP if it doesn't exist if not FruitESP[fruit] then FruitESP[fruit] = { Text = CreateText(), Box = CreateBox(), } end local esp = FruitESP[fruit] -- Calculate box size based on distance local boxSize = math.clamp(300 / (distance * 0.05), 20, 150) -- Update Box if Settings.ShowBox then esp.Box.Visible = true esp.Box.Size = Vector2.new(boxSize, boxSize) esp.Box.Position = Vector2.new(screenPos.X - boxSize/2, screenPos.Y - boxSize/2) esp.Box.Color = Settings.BoxColor else esp.Box.Visible = false end -- Update Text if Settings.ShowName then local displayText = fruit.Name if Settings.ShowDistance then displayText = displayText .. " [" .. math.floor(distance) .. "m]" end esp.Text.Visible = true esp.Text.Text = displayText esp.Text.Position = Vector2.new(screenPos.X, screenPos.Y - boxSize/2 - 18) esp.Text.Color = Settings.TextColor else esp.Text.Visible = false end end end) print("========================================") print(" HAZE SEAS FRUIT ESP LOADED!") print(" Tracking " .. #FRUIT_NAMES .. " fruits:") print(table.concat(FRUIT_NAMES, ", ")) print("========================================") print("If a fruit isn't showing, tell me its") print("exact in-game Model name and I'll add it.")