2
Description
Execute Script
--[[
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.")
Discussion
0 / 20Log in to join the discussion.
No comments yetBe the first to ask a question or leave feedback.