local Players = game:GetService("Players") local RunService = game:GetService("RunService") local player = Players.LocalPlayer local ScreenGui = Instance.new("ScreenGui") ScreenGui.Parent = player:WaitForChild("PlayerGui") local markers = {} local trackedHerbs = {} local function createMarker(herbName) local marker = Instance.new("Frame") marker.Name = "HerbMarker_" .. herbName marker.BackgroundTransparency = 1 marker.Size = UDim2.new(0, 50, 0, 50) marker.ZIndex = 10 marker.AnchorPoint = Vector2.new(0.5, 0.5) local outline = Instance.new("Frame") outline.Size = UDim2.new(1, 0, 1, 0) outline.BackgroundTransparency = 1 outline.BorderSizePixel = 3 outline.BorderColor3 = Color3.new(1, 0, 0) outline.BorderMode = Enum.BorderMode.Outline outline.Parent = marker local crosshairX = Instance.new("Frame") crosshairX.Size = UDim2.new(1, 0, 0, 2) crosshairX.Position = UDim2.new(0, 0, 0.5, -1) crosshairX.BackgroundColor3 = Color3.new(1, 0, 0) crosshairX.BorderSizePixel = 0 crosshairX.Parent = marker local crosshairY = Instance.new("Frame") crosshairY.Size = UDim2.new(0, 2, 1, 0) crosshairY.Position = UDim2.new(0.5, -1, 0, 0) crosshairY.BackgroundColor3 = Color3.new(1, 0, 0) crosshairY.BorderSizePixel = 0 crosshairY.Parent = marker local label = Instance.new("TextLabel") label.Size = UDim2.new(2, 0, 0, 20) label.Position = UDim2.new(0.5, 0, 1, 5) label.AnchorPoint = Vector2.new(0.5, 0) label.BackgroundTransparency = 1 label.Text = herbName label.TextColor3 = Color3.new(1, 0, 0) label.TextStrokeColor3 = Color3.new(0, 0, 0) label.TextStrokeTransparency = 0 label.TextSize = 14 label.Font = Enum.Font.GothamBold label.Parent = marker marker.Parent = ScreenGui return marker end local function updateMarkers() local character = player.Character if not character then for _, marker in pairs(markers) do if marker then marker.Visible = false end end trackedHerbs = {} return end local humanoidRootPart = character:FindFirstChild("HumanoidRootPart") if not humanoidRootPart then return end local herbsContainer = workspace:FindFirstChild("Herbs") if not herbsContainer then for _, marker in pairs(markers) do if marker then marker.Visible = false end end trackedHerbs = {} return end local currentHerbs = {} local markerIndex = 1 for _, herb in ipairs(herbsContainer:GetDescendants()) do if herb:IsA("ProximityPrompt") and herb.Parent then local herbPart = herb.Parent local herbId = herbPart:GetFullName() currentHerbs[herbId] = true if not trackedHerbs[herbId] then trackedHerbs[herbId] = { part = herbPart, name = herbPart.Name, marker = nil } end local trackedHerb = trackedHerbs[herbId] if trackedHerb.name ~= herbPart.Name then trackedHerb.name = herbPart.Name if trackedHerb.marker then local label = trackedHerb.marker:FindFirstChildWhichIsA("TextLabel") if label then label.Text = herbPart.Name end end end local camera = workspace.CurrentCamera local vector, onScreen = camera:WorldToViewportPoint(herbPart.Position) if onScreen then if not trackedHerb.marker then trackedHerb.marker = createMarker(herbPart.Name) trackedHerb.marker.Visible = false end local marker = trackedHerb.marker marker.Visible = true marker.Position = UDim2.new(0, vector.X, 0, vector.Y) local distance = (humanoidRootPart.Position - herbPart.Position).Magnitude local scale = math.clamp(100 / distance, 0.5, 3) marker.Size = UDim2.new(0, 50 * scale, 0, 50 * scale) marker.ZIndex = 10 + math.floor((1 - math.clamp(distance / 500, 0, 1)) * 10) elseif trackedHerb.marker then trackedHerb.marker.Visible = false end end end for herbId, trackedHerb in pairs(trackedHerbs) do if not currentHerbs[herbId] then if trackedHerb.marker then trackedHerb.marker:Destroy() end trackedHerbs[herbId] = nil end end markers = {} for _, trackedHerb in pairs(trackedHerbs) do if trackedHerb.marker then table.insert(markers, trackedHerb.marker) end end end game:GetService("Players").PlayerRemoving:Connect(function(leavingPlayer) if leavingPlayer == player then ScreenGui:Destroy() end end) local connection connection = RunService.RenderStepped:Connect(function() local success, err = pcall(updateMarkers) if not success then warn("Ошибка в updateMarkers:", err) connection:Disconnect() connection = RunService.RenderStepped:Connect(updateMarkers) end end)