ESP HERBS and (added manuals ESP upd.)
Key Required

ESP HERBS and (added manuals ESP upd.)

[🌔] Immortal CultivationSecretImmortalSecretImmortal 4.7K views 217 executesUpdated Dec 2, 2025
5.0/ 5(2 votes)
20100% Positive
Lua Script•618 lines (25672 chars)
--[[
 .____                  ________ ___.    _____                           __                
 |    |    __ _______   \_____  \\_ |___/ ____\_ __  ______ ____ _____ _/  |_  ___________ 
 |    |   |  |  \__  \   /   |   \| __ \   __\  |  \/  ___// ___\\__  \\   __\/  _ \_  __ \
 |    |___|  |  // __ \_/    |    \ \_\ \  | |  |  /\___ \\  \___ / __ \|  | (  <_> )  | \/
 |_______ \____/(____  /\_______  /___  /__| |____//____  >\___  >____  /__|  \____/|__|   
         \/          \/         \/    \/                \/     \/     \/                   
          \_Welcome to LuaObfuscator.com   (Alpha 0.10.9) ~  Much Love, Ferib 

]]--

local Players = game:GetService("Players");
local RunService = game:GetService("RunService");
local Workspace = game:GetService("Workspace");
local UIS = game:GetService("UserInputService");
local player = Players.LocalPlayer;
local camera = Workspace.CurrentCamera;
local herbs = {["Sorrowful Poison Drip"]=true,["Soothing Soul Root"]=true,Ginseng=true,["Extreme Yang Grass"]=true,["Heart Lotus"]=true};
local herbsScreenGui = Instance.new("ScreenGui");
herbsScreenGui.Name = "HerbsESP";
herbsScreenGui.Parent = player:WaitForChild("PlayerGui");
local herbsControlGui = Instance.new("ScreenGui");
herbsControlGui.Name = "HerbsESP_Control";
herbsControlGui.Enabled = true;
local herbsControlFrame = Instance.new("Frame");
herbsControlFrame.Name = "ControlFrame";
herbsControlFrame.Size = UDim2.new(0, 250, 0, 300);
herbsControlFrame.Position = UDim2.new(0, 10, 0, 10);
herbsControlFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20);
herbsControlFrame.BorderSizePixel = 2;
herbsControlFrame.BorderColor3 = Color3.fromRGB(50, 50, 50);
local herbsTitle = Instance.new("TextLabel");
herbsTitle.Name = "Title";
herbsTitle.Size = UDim2.new(1, 0, 0, 30);
herbsTitle.Position = UDim2.new(0, 0, 0, 0);
herbsTitle.BackgroundColor3 = Color3.fromRGB(30, 30, 30);
herbsTitle.Text = "HERBS ESP CONTROL";
herbsTitle.TextColor3 = Color3.fromRGB(255, 255, 255);
herbsTitle.Font = Enum.Font.GothamBold;
herbsTitle.TextSize = 16;
herbsTitle.Parent = herbsControlFrame;
local herbsCreditLabel = Instance.new("TextLabel");
herbsCreditLabel.Name = "CreditLabel";
herbsCreditLabel.Size = UDim2.new(1, 0, 0, 20);
herbsCreditLabel.Position = UDim2.new(0, 0, 0, 30);
herbsCreditLabel.BackgroundTransparency = 1;
herbsCreditLabel.Text = "by: secretimmortal";
herbsCreditLabel.TextColor3 = Color3.fromRGB(200, 200, 200);
herbsCreditLabel.Font = Enum.Font.Gotham;
herbsCreditLabel.TextSize = 12;
herbsCreditLabel.Parent = herbsControlFrame;
local herbsCloseButton = Instance.new("TextButton");
herbsCloseButton.Name = "CloseButton";
herbsCloseButton.Size = UDim2.new(0, 30, 0, 30);
herbsCloseButton.Position = UDim2.new(1, -30, 0, 0);
herbsCloseButton.BackgroundColor3 = Color3.fromRGB(255, 50, 50);
herbsCloseButton.Text = "X";
herbsCloseButton.TextColor3 = Color3.fromRGB(255, 255, 255);
herbsCloseButton.Font = Enum.Font.GothamBold;
herbsCloseButton.TextSize = 14;
herbsCloseButton.Parent = herbsControlFrame;
local herbsToggleAllButton = Instance.new("TextButton");
herbsToggleAllButton.Name = "ToggleAll";
herbsToggleAllButton.Size = UDim2.new(0.9, 0, 0, 30);
herbsToggleAllButton.Position = UDim2.new(0.05, 0, 0, 55);
herbsToggleAllButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60);
herbsToggleAllButton.Text = "TOGGLE ALL ON/OFF";
herbsToggleAllButton.TextColor3 = Color3.fromRGB(255, 255, 255);
herbsToggleAllButton.Font = Enum.Font.GothamBold;
herbsToggleAllButton.TextSize = 14;
herbsToggleAllButton.Parent = herbsControlFrame;
local herbsContainer = Instance.new("ScrollingFrame");
herbsContainer.Name = "HerbsContainer";
herbsContainer.Size = UDim2.new(0.9, 0, 0, 160);
herbsContainer.Position = UDim2.new(0.05, 0, 0, 95);
herbsContainer.BackgroundColor3 = Color3.fromRGB(25, 25, 25);
herbsContainer.BorderSizePixel = 0;
herbsContainer.ScrollBarThickness = 6;
herbsContainer.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 100);
herbsContainer.CanvasSize = UDim2.new(0, 0, 0, 0);
herbsContainer.Parent = herbsControlFrame;
local herbsStatusText = Instance.new("TextLabel");
herbsStatusText.Name = "Status";
herbsStatusText.Size = UDim2.new(0.9, 0, 0, 25);
herbsStatusText.Position = UDim2.new(0.05, 0, 1, -30);
herbsStatusText.BackgroundTransparency = 1;
herbsStatusText.Text = "Press F1 to hide/show";
herbsStatusText.TextColor3 = Color3.fromRGB(200, 200, 200);
herbsStatusText.Font = Enum.Font.Gotham;
herbsStatusText.TextSize = 12;
herbsStatusText.Parent = herbsControlFrame;
herbsControlFrame.Parent = herbsControlGui;
herbsControlGui.Parent = player:WaitForChild("PlayerGui");
local itemColors = {["Copper Body Formula"]=Color3.fromRGB(255, 100, 0),BeastSoul=Color3.fromRGB(0, 200, 255),["Book of Life and Death"]=Color3.fromRGB(0, 200, 255),["Earth Flame Manual"]=Color3.fromRGB(0, 200, 255),["Journey to the West"]=Color3.fromRGB(0, 200, 255),["Star Reaving Scripture"]=Color3.fromRGB(0, 200, 255),LotusSutra=Color3.fromRGB(0, 200, 255),["Rising Dragon"]=Color3.fromRGB(0, 200, 255),["Steel Body Formula"]=Color3.fromRGB(0, 200, 255),["Verdant Wind Manual"]=Color3.fromRGB(0, 200, 255),["Verdant Wind Scripture"]=Color3.fromRGB(0, 200, 255),["Soul Shedding"]=Color3.fromRGB(0, 200, 255),["Qi Condensation Sutra"]=Color3.fromRGB(0, 200, 255),["Maniac's Cultivation Tips"]=Color3.fromRGB(0, 200, 255),["Nine Yang Scripture"]=Color3.fromRGB(255, 100, 0),["Six Yin Scripture"]=Color3.fromRGB(150, 50, 200),["Mother Earth Technique"]=Color3.fromRGB(0, 180, 80)};
local exactItemNames = {["Copper Body Formula"]=true,BeastSoul=true,["Book of Life and Death"]=true,["Earth Flame Manual"]=true,["Journey to the West"]=true,["Star Reaving Scripture"]=true,LotusSutra=true,["Rising Dragon"]=true,["Steel Body Formula"]=true,["Verdant Wind Manual"]=true,["Verdant Wind Scripture"]=true,["Soul Shedding"]=true,["Qi Condensation Sutra"]=true,["Maniac's Cultivation Tips"]=true,["Nine Yang Scripture"]=true,["Six Yin Scripture"]=true,["Mother Earth Technique"]=true};
local manualsScreenGui = Instance.new("ScreenGui");
manualsScreenGui.Name = "CultivationItemsESP";
manualsScreenGui.Parent = player:WaitForChild("PlayerGui");
local manualsControlGui = Instance.new("ScreenGui");
manualsControlGui.Name = "ManualsESP_Control";
manualsControlGui.Enabled = true;
local manualsControlFrame = Instance.new("Frame");
manualsControlFrame.Name = "ControlFrame";
manualsControlFrame.Size = UDim2.new(0, 250, 0, 340);
manualsControlFrame.Position = UDim2.new(0, 270, 0, 10);
manualsControlFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 20);
manualsControlFrame.BorderSizePixel = 2;
manualsControlFrame.BorderColor3 = Color3.fromRGB(50, 50, 50);
local manualsTitle = Instance.new("TextLabel");
manualsTitle.Name = "Title";
manualsTitle.Size = UDim2.new(1, 0, 0, 30);
manualsTitle.Position = UDim2.new(0, 0, 0, 0);
manualsTitle.BackgroundColor3 = Color3.fromRGB(30, 30, 30);
manualsTitle.Text = "MANUALS ESP CONTROL";
manualsTitle.TextColor3 = Color3.fromRGB(255, 255, 255);
manualsTitle.Font = Enum.Font.GothamBold;
manualsTitle.TextSize = 16;
manualsTitle.Parent = manualsControlFrame;
local manualsCreditLabel = Instance.new("TextLabel");
manualsCreditLabel.Name = "CreditLabel";
manualsCreditLabel.Size = UDim2.new(1, 0, 0, 20);
manualsCreditLabel.Position = UDim2.new(0, 0, 0, 30);
manualsCreditLabel.BackgroundTransparency = 1;
manualsCreditLabel.Text = "by: secretimmortal";
manualsCreditLabel.TextColor3 = Color3.fromRGB(200, 200, 200);
manualsCreditLabel.Font = Enum.Font.Gotham;
manualsCreditLabel.TextSize = 12;
manualsCreditLabel.Parent = manualsControlFrame;
local manualsCloseButton = Instance.new("TextButton");
manualsCloseButton.Name = "CloseButton";
manualsCloseButton.Size = UDim2.new(0, 30, 0, 30);
manualsCloseButton.Position = UDim2.new(1, -30, 0, 0);
manualsCloseButton.BackgroundColor3 = Color3.fromRGB(255, 50, 50);
manualsCloseButton.Text = "X";
manualsCloseButton.TextColor3 = Color3.fromRGB(255, 255, 255);
manualsCloseButton.Font = Enum.Font.GothamBold;
manualsCloseButton.TextSize = 14;
manualsCloseButton.Parent = manualsControlFrame;
local manualsToggleAllButton = Instance.new("TextButton");
manualsToggleAllButton.Name = "ToggleAll";
manualsToggleAllButton.Size = UDim2.new(0.9, 0, 0, 30);
manualsToggleAllButton.Position = UDim2.new(0.05, 0, 0, 55);
manualsToggleAllButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60);
manualsToggleAllButton.Text = "TOGGLE ALL ON/OFF";
manualsToggleAllButton.TextColor3 = Color3.fromRGB(255, 255, 255);
manualsToggleAllButton.Font = Enum.Font.GothamBold;
manualsToggleAllButton.TextSize = 14;
manualsToggleAllButton.Parent = manualsControlFrame;
local manualsContainer = Instance.new("ScrollingFrame");
manualsContainer.Name = "ManualsContainer";
manualsContainer.Size = UDim2.new(0.9, 0, 0, 200);
manualsContainer.Position = UDim2.new(0.05, 0, 0, 95);
manualsContainer.BackgroundColor3 = Color3.fromRGB(25, 25, 25);
manualsContainer.BorderSizePixel = 0;
manualsContainer.ScrollBarThickness = 6;
manualsContainer.ScrollBarImageColor3 = Color3.fromRGB(100, 100, 100);
manualsContainer.CanvasSize = UDim2.new(0, 0, 0, 0);
manualsContainer.Parent = manualsControlFrame;
local manualsStatusText = Instance.new("TextLabel");
manualsStatusText.Name = "Status";
manualsStatusText.Size = UDim2.new(0.9, 0, 0, 25);
manualsStatusText.Position = UDim2.new(0.05, 0, 1, -30);
manualsStatusText.BackgroundTransparency = 1;
manualsStatusText.Text = "F4: Hide/Show | F5: Refresh";
manualsStatusText.TextColor3 = Color3.fromRGB(200, 200, 200);
manualsStatusText.Font = Enum.Font.Gotham;
manualsStatusText.TextSize = 12;
manualsStatusText.Parent = manualsControlFrame;
manualsControlFrame.Parent = manualsControlGui;
manualsControlGui.Parent = player:WaitForChild("PlayerGui");
local herbButtons = {};
local herbEspLabels = {};
local manualsButtons = {};
local manualsEspLabels = {};
local function createHerbToggleButtons()
	herbsContainer:ClearAllChildren();
	herbButtons = {};
	local yOffset = 0;
	local buttonHeight = 30;
	for herbName, isEnabled in pairs(herbs) do
		local buttonFrame = Instance.new("Frame");
		buttonFrame.Name = herbName .. "_Frame";
		buttonFrame.Size = UDim2.new(1, 0, 0, buttonHeight);
		buttonFrame.Position = UDim2.new(0, 0, 0, yOffset);
		buttonFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35);
		buttonFrame.BorderSizePixel = 0;
		local herbLabel = Instance.new("TextLabel");
		herbLabel.Name = herbName .. "_Label";
		herbLabel.Size = UDim2.new(0.7, 0, 1, 0);
		herbLabel.Position = UDim2.new(0, 0, 0, 0);
		herbLabel.BackgroundTransparency = 1;
		herbLabel.Text = herbName;
		herbLabel.TextColor3 = Color3.fromRGB(255, 255, 255);
		herbLabel.Font = Enum.Font.Gotham;
		herbLabel.TextSize = 12;
		herbLabel.TextXAlignment = Enum.TextXAlignment.Left;
		herbLabel.Parent = buttonFrame;
		local toggleButton = Instance.new("TextButton");
		toggleButton.Name = herbName .. "_Toggle";
		toggleButton.Size = UDim2.new(0.25, 0, 0.7, 0);
		toggleButton.Position = UDim2.new(0.73, 0, 0.15, 0);
		toggleButton.BackgroundColor3 = (isEnabled and Color3.fromRGB(50, 200, 50)) or Color3.fromRGB(200, 50, 50);
		toggleButton.Text = (isEnabled and "ON") or "OFF";
		toggleButton.TextColor3 = Color3.fromRGB(255, 255, 255);
		toggleButton.Font = Enum.Font.GothamBold;
		toggleButton.TextSize = 12;
		toggleButton.Parent = buttonFrame;
		herbButtons[herbName] = {Frame=buttonFrame,Button=toggleButton,Enabled=isEnabled};
		toggleButton.MouseButton1Click:Connect(function()
			herbs[herbName] = not herbs[herbName];
			herbButtons[herbName].Enabled = herbs[herbName];
			herbButtons[herbName].Button.BackgroundColor3 = (herbs[herbName] and Color3.fromRGB(50, 200, 50)) or Color3.fromRGB(200, 50, 50);
			herbButtons[herbName].Button.Text = (herbs[herbName] and "ON") or "OFF";
			for object, data in pairs(herbEspLabels) do
				if (data.Name == herbName) then
					data.Label.Visible = herbs[herbName];
				end
			end
			print("[Herbs ESP] " .. herbName .. " " .. ((herbs[herbName] and "ENABLED") or "DISABLED"));
		end);
		buttonFrame.Parent = herbsContainer;
		yOffset = yOffset + buttonHeight + 2;
	end
	herbsContainer.CanvasSize = UDim2.new(0, 0, 0, yOffset);
end
local function createHerbLabel(herbName, distance)
	local label = Instance.new("TextLabel");
	label.Name = "HERB_" .. herbName;
	label.BackgroundTransparency = 0.8;
	label.BackgroundColor3 = Color3.fromRGB(0, 0, 0);
	label.TextColor3 = Color3.fromRGB(255, 0, 0);
	label.TextStrokeTransparency = 0.3;
	label.TextStrokeColor3 = Color3.new(0, 0, 0);
	label.Font = Enum.Font.GothamBold;
	label.TextSize = 14;
	label.Text = herbName .. " (" .. tostring(math.floor(distance)) .. ")";
	label.Visible = herbs[herbName];
	label.ZIndex = 10;
	label.Size = UDim2.new(0, 180, 0, 30);
	label.Parent = herbsScreenGui;
	return label;
end
local function findHerbInDescendants(object)
	if not object then
		return nil;
	end
	for herbName, _ in pairs(herbs) do
		if object.Name:lower():find(herbName:lower(), 1, true) then
			return herbName;
		end
	end
	if object:IsA("Model") then
		for _, child in ipairs(object:GetChildren()) do
			for herbName, _ in pairs(herbs) do
				if child.Name:lower():find(herbName:lower(), 1, true) then
					return herbName;
				end
			end
		end
	end
	return nil;
end
local function getHerbWorldPosition(object)
	if object:IsA("BasePart") then
		return object.Position;
	elseif object:IsA("Model") then
		local primary = object.PrimaryPart or object:FindFirstChildWhichIsA("BasePart");
		if primary then
			return primary.Position;
		end
		return object:GetPivot().Position;
	end
	return Vector3.new(0, 0, 0);
end
local function updateHerbsESP()
	for object, data in pairs(herbEspLabels) do
		if data.Label then
			data.Label:Destroy();
		end
	end
	herbEspLabels = {};
	local foundCount = 0;
	local function scanFolder(folder)
		for _, item in ipairs(folder:GetDescendants()) do
			if (item:IsA("Model") or item:IsA("BasePart")) then
				local herbName = findHerbInDescendants(item);
				if (herbName and herbs[herbName] and not herbEspLabels[item]) then
					local worldPos = getHerbWorldPosition(item);
					local distance = (camera.CFrame.Position - worldPos).Magnitude;
					local label = createHerbLabel(herbName, distance);
					herbEspLabels[item] = {Label=label,Name=herbName,Object=item,WorldPos=worldPos};
					foundCount = foundCount + 1;
				end
			end
		end
	end
	scanFolder(Workspace);
	herbsStatusText.Text = "Found: " .. foundCount .. "/5 herbs";
	print("[Herbs ESP] Found " .. foundCount .. "/5 herbs");
end
local function createManualsToggleButtons()
	manualsContainer:ClearAllChildren();
	manualsButtons = {};
	local yOffset = 0;
	local buttonHeight = 30;
	for itemName, _ in pairs(exactItemNames) do
		local isEnabled = true;
		local buttonFrame = Instance.new("Frame");
		buttonFrame.Name = itemName .. "_Frame";
		buttonFrame.Size = UDim2.new(1, 0, 0, buttonHeight);
		buttonFrame.Position = UDim2.new(0, 0, 0, yOffset);
		buttonFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35);
		buttonFrame.BorderSizePixel = 0;
		local itemLabel = Instance.new("TextLabel");
		itemLabel.Name = itemName .. "_Label";
		itemLabel.Size = UDim2.new(0.7, 0, 1, 0);
		itemLabel.Position = UDim2.new(0, 0, 0, 0);
		itemLabel.BackgroundTransparency = 1;
		itemLabel.Text = itemName;
		itemLabel.TextColor3 = Color3.fromRGB(255, 255, 255);
		itemLabel.Font = Enum.Font.Gotham;
		itemLabel.TextSize = 12;
		itemLabel.TextXAlignment = Enum.TextXAlignment.Left;
		itemLabel.Parent = buttonFrame;
		local toggleButton = Instance.new("TextButton");
		toggleButton.Name = itemName .. "_Toggle";
		toggleButton.Size = UDim2.new(0.25, 0, 0.7, 0);
		toggleButton.Position = UDim2.new(0.73, 0, 0.15, 0);
		toggleButton.BackgroundColor3 = Color3.fromRGB(50, 200, 50);
		toggleButton.Text = "ON";
		toggleButton.TextColor3 = Color3.fromRGB(255, 255, 255);
		toggleButton.Font = Enum.Font.GothamBold;
		toggleButton.TextSize = 12;
		toggleButton.Parent = buttonFrame;
		manualsButtons[itemName] = {Frame=buttonFrame,Button=toggleButton,Enabled=true};
		toggleButton.MouseButton1Click:Connect(function()
			manualsButtons[itemName].Enabled = not manualsButtons[itemName].Enabled;
			toggleButton.BackgroundColor3 = (manualsButtons[itemName].Enabled and Color3.fromRGB(50, 200, 50)) or Color3.fromRGB(200, 50, 50);
			toggleButton.Text = (manualsButtons[itemName].Enabled and "ON") or "OFF";
			for object, data in pairs(manualsEspLabels) do
				if (data.Name == itemName) then
					data.Label.Visible = manualsButtons[itemName].Enabled;
				end
			end
			print("[Manuals ESP] " .. itemName .. " " .. ((manualsButtons[itemName].Enabled and "ENABLED") or "DISABLED"));
		end);
		buttonFrame.Parent = manualsContainer;
		yOffset = yOffset + buttonHeight + 2;
	end
	manualsContainer.CanvasSize = UDim2.new(0, 0, 0, yOffset);
end
local function createManualESPLabel(itemName, customColor)
	local label = Instance.new("TextLabel");
	label.Name = "ESP_" .. itemName;
	label.BackgroundTransparency = 1;
	label.TextColor3 = customColor or itemColors[itemName] or Color3.new(1, 1, 1);
	label.TextStrokeTransparency = 0.2;
	label.TextStrokeColor3 = Color3.new(0, 0, 0);
	label.TextTransparency = 0;
	label.Font = Enum.Font.GothamBold;
	label.TextSize = 18;
	label.Text = itemName;
	label.Visible = true;
	label.ZIndex = 10;
	label.Size = UDim2.new(0, 200, 0, 40);
	label.TextScaled = false;
	label.Parent = manualsScreenGui;
	return label;
end
local function isNPC(object)
	local name = object.Name:lower();
	local avoidNames = {bearst=true,clan=true,npc=true,player=true,character=true,marvel=true};
	for avoidName, _ in pairs(avoidNames) do
		if name:find(avoidName) then
			return true;
		end
	end
	if (object:IsA("Model") and object:FindFirstChildOfClass("Humanoid")) then
		return true;
	end
	return false;
end
local function isTargetItem(object)
	local objectName = object.Name;
	if isNPC(object) then
		return nil;
	end
	local lowerObjectName = objectName:lower();
	for itemName, _ in pairs(exactItemNames) do
		if lowerObjectName:find(itemName:lower()) then
			return itemName, itemColors[itemName];
		end
	end
	return nil;
end
local function getManualWorldPosition(object)
	if object:IsA("BasePart") then
		return object.Position;
	elseif object:IsA("Model") then
		return object:GetPivot().Position;
	elseif object:IsA("Attachment") then
		return object.WorldPosition;
	elseif object:IsA("Folder") then
		for _, child in pairs(object:GetChildren()) do
			if child:IsA("BasePart") then
				return child.Position;
			end
		end
	end
	return Vector3.new(0, 0, 0);
end
local function updateManualsESP()
	for object, label in pairs(manualsEspLabels) do
		if label then
			label:Destroy();
		end
	end
	manualsEspLabels = {};
	local foundCount = 0;
	for _, descendant in pairs(Workspace:GetDescendants()) do
		local itemName, itemColor = isTargetItem(descendant);
		if (itemName and not manualsEspLabels[descendant]) then
			local label = createManualESPLabel(itemName, itemColor);
			manualsEspLabels[descendant] = {Label=label,Name=itemName,Object=descendant};
			foundCount = foundCount + 1;
		end
	end
	manualsStatusText.Text = "Found: " .. foundCount .. "/17 manuals";
	print("[Manuals ESP] Found " .. foundCount .. "/17 items");
end
RunService.RenderStepped:Connect(function()
	for object, data in pairs(herbEspLabels) do
		local label = data.Label;
		if (object and object.Parent) then
			local worldPos = data.WorldPos or getHerbWorldPosition(object);
			local screenPos, onScreen = camera:WorldToScreenPoint(worldPos);
			if (onScreen and herbs[data.Name]) then
				local distance = (camera.CFrame.Position - worldPos).Magnitude;
				label.Text = data.Name .. " (" .. tostring(math.floor(distance)) .. ")";
				label.Visible = true;
				label.Position = UDim2.new(0, screenPos.X - (label.AbsoluteSize.X / 2), 0, screenPos.Y - 15);
			else
				label.Visible = false;
			end
		else
			label.Visible = false;
			label:Destroy();
			herbEspLabels[object] = nil;
		end
	end
end);
RunService.RenderStepped:Connect(function()
	for object, data in pairs(manualsEspLabels) do
		local label = data.Label;
		if (object and object:IsDescendantOf(Workspace)) then
			local worldPosition = getManualWorldPosition(object);
			local screenPosition, onScreen = camera:WorldToScreenPoint(worldPosition);
			if (onScreen and manualsButtons[data.Name] and manualsButtons[data.Name].Enabled) then
				label.Visible = true;
				label.Position = UDim2.new(0, screenPosition.X - (label.AbsoluteSize.X / 2), 0, screenPosition.Y - 20);
				local distance = (camera.CFrame.Position - worldPosition).Magnitude;
				label.Text = string.format("%s\n%d studs", data.Name, math.floor(distance));
			else
				label.Visible = false;
			end
		else
			label.Visible = false;
			if (not object or not object:IsDescendantOf(Workspace)) then
				label:Destroy();
				manualsEspLabels[object] = nil;
			end
		end
	end
end);
createHerbToggleButtons();
createManualsToggleButtons();
wait(2);
updateHerbsESP();
updateManualsESP();
spawn(function()
	while true do
		wait(30);
		updateHerbsESP();
		print("[Herbs ESP] Auto-refreshed (30 seconds)");
	end
end);
spawn(function()
	while true do
		wait(30);
		updateManualsESP();
		print("[Manuals ESP] Auto-refreshed (30 seconds)");
	end
end);
herbsToggleAllButton.MouseButton1Click:Connect(function()
	local allOn = true;
	for herbName, _ in pairs(herbs) do
		if not herbs[herbName] then
			allOn = false;
			break;
		end
	end
	for herbName, _ in pairs(herbs) do
		herbs[herbName] = not allOn;
		herbButtons[herbName].Enabled = herbs[herbName];
		herbButtons[herbName].Button.BackgroundColor3 = (herbs[herbName] and Color3.fromRGB(50, 200, 50)) or Color3.fromRGB(200, 50, 50);
		herbButtons[herbName].Button.Text = (herbs[herbName] and "ON") or "OFF";
	end
	for object, data in pairs(herbEspLabels) do
		data.Label.Visible = herbs[data.Name];
	end
	print("[Herbs ESP] All herbs " .. ((not allOn and "ENABLED") or "DISABLED"));
end);
manualsToggleAllButton.MouseButton1Click:Connect(function()
	local allOn = true;
	for itemName, data in pairs(manualsButtons) do
		if not data.Enabled then
			allOn = false;
			break;
		end
	end
	for itemName, data in pairs(manualsButtons) do
		data.Enabled = not allOn;
		data.Button.BackgroundColor3 = (data.Enabled and Color3.fromRGB(50, 200, 50)) or Color3.fromRGB(200, 50, 50);
		data.Button.Text = (data.Enabled and "ON") or "OFF";
	end
	for object, data in pairs(manualsEspLabels) do
		data.Label.Visible = manualsButtons[data.Name].Enabled;
	end
	print("[Manuals ESP] All items " .. ((not allOn and "ENABLED") or "DISABLED"));
end);
herbsCloseButton.MouseButton1Click:Connect(function()
	herbsControlGui.Enabled = false;
	herbsStatusText.Text = "GUI Hidden - Press F1";
end);
manualsCloseButton.MouseButton1Click:Connect(function()
	manualsControlGui.Enabled = false;
	manualsStatusText.Text = "GUI Hidden - Press F4";
end);
UIS.InputBegan:Connect(function(input)
	if (input.KeyCode == Enum.KeyCode.F1) then
		herbsControlGui.Enabled = not herbsControlGui.Enabled;
		herbsStatusText.Text = (herbsControlGui.Enabled and "GUI Visible") or "GUI Hidden";
	elseif (input.KeyCode == Enum.KeyCode.F2) then
		updateHerbsESP();
		print("[Herbs ESP] Refreshed manually");
	elseif (input.KeyCode == Enum.KeyCode.F3) then
		herbsScreenGui.Enabled = not herbsScreenGui.Enabled;
		print("[Herbs ESP] Display " .. ((herbsScreenGui.Enabled and "ON") or "OFF"));
	elseif (input.KeyCode == Enum.KeyCode.F4) then
		manualsControlGui.Enabled = not manualsControlGui.Enabled;
		manualsStatusText.Text = (manualsControlGui.Enabled and "GUI Visible") or "GUI Hidden";
	elseif (input.KeyCode == Enum.KeyCode.F5) then
		updateManualsESP();
		print("[Manuals ESP] Refreshed manually");
	elseif (input.KeyCode == Enum.KeyCode.F6) then
		manualsScreenGui.Enabled = not manualsScreenGui.Enabled;
		print("[Manuals ESP] Display " .. ((manualsScreenGui.Enabled and "ON") or "OFF"));
	end
end);
local function makeDraggable(frame)
	local dragging = false;
	local dragInput, dragStart, startPos;
	local function update(input)
		local delta = input.Position - dragStart;
		frame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y);
	end
	frame.InputBegan:Connect(function(input)
		if (input.UserInputType == Enum.UserInputType.MouseButton1) then
			dragging = true;
			dragStart = input.Position;
			startPos = frame.Position;
			input.Changed:Connect(function()
				if (input.UserInputState == Enum.UserInputState.End) then
					dragging = false;
				end
			end);
		end
	end);
	frame.InputChanged:Connect(function(input)
		if (input.UserInputType == Enum.UserInputType.MouseMovement) then
			dragInput = input;
		end
	end);
	UIS.InputChanged:Connect(function(input)
		if ((input == dragInput) and dragging) then
			update(input);
		end
	end);
end
makeDraggable(herbsControlFrame);
makeDraggable(manualsControlFrame);
print("========================================");
print("DUAL ESP SYSTEM LOADED SUCCESSFULLY!");
print("Created by: secretimmortal");
print("========================================");
print("HERBS ESP (5 herbs):");
for herbName, _ in pairs(herbs) do
	print("  - " .. herbName);
end
print("");
print("MANUALS ESP (17 items):");
local itemList = {};
for itemName, _ in pairs(exactItemNames) do
	table.insert(itemList, itemName);
end
table.sort(itemList);
for i, itemName in ipairs(itemList) do
	print("  " .. i .. ". " .. itemName);
end
print("");
print("=== CONTROLS ===");
print("F1: Show/Hide Herbs GUI");
print("F2: Refresh Herbs ESP");
print("F3: Toggle Herbs Display");
print("F4: Show/Hide Manuals GUI");
print("F5: Refresh Manuals ESP");
print("F6: Toggle Manuals Display");
print("Auto-refresh rate: 30 seconds for both");

Features & Information

ESP Herbs Ginseng Jade Marrow Grass Soothing Soul Root HeartLotus Sorrowful Poison Drip For Now. F1 = Show/Hide Control Panel F2 = Refresh ESP¨ F3 = Toggle ESP Display ESP MANUALS F4: Show/Hide Manuals GUI F5: Refresh Manuals ESP F6: Toggle Manuals Display Worked on Xeno Executor.

Community Comments (20)

hansacorfuhansacorfuDec 2, 2025

hi... i need script help if u want to help discord is humanidades !

Replying to @hansacorfu
YukeyYukeyDec 3, 2025

@hansacorfu found any?

RaterSSSRaterSSSDec 2, 2025

this is for auto collect herbs btw dont change numbers so u dont lag

RaterSSSRaterSSSDec 2, 2025

wait no this script is for the alpha one

SecretImmortalSecretImmortalDec 2, 2025

Update: i have ESP that highlights herbs: local herbsFolder = workspace:WaitForChild("Herbs") local function highlightModel(model) -- Create highlight local highlight = Instance.new("Highlight") highlight.Parent = model highlight.FillColor = Color3.fromRGB(0, 255, 0) highlight.OutlineColor = Color3.fromRGB(255, 255, 255) end for _, herb in ipairs(herbsFolder:GetChildren()) do -- If it is a Model, highlight the whole model if herb:IsA("Model") then highlightModel(herb) end -- If it's a Part directly, highlight the part if herb:IsA("BasePart") then local highlight = Instance.new("Highlight") highlight.Parent = herb highlight.FillColor = Color3.fromRGB(0, 255, 0) highlight.OutlineColor = Color3.fromRGB(255, 255, 255) end end

Replying to @SecretImmortal
YukeyYukeyDec 3, 2025

@SecretImmortal how to use this

Replying to @SecretImmortal
h0533243h0533243Feb 2, 2026

@SecretImmortal Hi could you make a script for new popular Xianxia Cultivation game? "[UPDATE Mining] Reborn Insanity"

YukeyYukeyDec 3, 2025

need auto collect herbs manuals kill aura

Mohsen909090Mohsen909090Dec 5, 2025

Any working scripts?1?1??1

Mohsen909090Mohsen909090Dec 5, 2025

where script

SecretImmortalSecretImmortalDec 7, 2025

@cultysda the lag is refresh rate. searching for herbs. every 5 seconds or so

Replying to @SecretImmortal
cultysdacultysdaDec 7, 2025

@SecretImmortal Could you made it every 1 minute ?

Replying to @cultysda
SecretImmortalSecretImmortalDec 8, 2025

@cultysda i did it every 30s

SecretImmortalSecretImmortalDec 7, 2025

@cultysda i am not able to since im not good scripter

Replying to @SecretImmortal
cultysdacultysdaDec 7, 2025(edited)

@SecretImmortal Can you at least add a ESP to Manuals that spawn? Please add this its most important than anything should be in the script

Replying to @cultysda
SecretImmortalSecretImmortalDec 8, 2025

@cultysda yeah i added it. try it now.

igorlyp707igorlyp707Dec 8, 2025

does not work for me on delta

Replying to @igorlyp707
SecretImmortalSecretImmortalDec 8, 2025

@igorlyp707 try xeno. i use xeno and that works.

h0533243h0533243Feb 2, 2026

Hi could you make a script for new popular Xianxia Cultivation game? "[UPDATE Mining] Reborn Insanity"

Mr_*ody666Mr_*ody666Aug 22, 2026

I got banned

More Scripts for [🌔] Immortal Cultivation