-- Card ESP: GUN = Red, SHIELD = Blue, BULLET = Yellow -- Tracks shuffled card types via Item attribute + server reveal events -- Place in StarterPlayerScripts local Workspace = game:GetService("Workspace") local ReplicatedStorage = game:GetService("ReplicatedStorage") local cardsFolder = Workspace:FindFirstChild("MatchOff_Arena") and Workspace.MatchOff_Arena:FindFirstChild("Cards") if not cardsFolder then warn("[CardESP] Could not find Workspace.MatchOff_Arena.Cards") return end local remotes = ReplicatedStorage:FindFirstChild("MemoryKill") and ReplicatedStorage.MemoryKill:FindFirstChild("Remotes") -- Stores the actual card type after shuffle/reveal local cardTypes = {} local colors = { GUN = Color3.fromRGB(255, 0, 0), -- Red SHIELD = Color3.fromRGB(0, 120, 255), -- Blue BULLET = Color3.fromRGB(255, 255, 0) -- Yellow } local function getCardType(card) return cardTypes[card.Name] or card:GetAttribute("Item") end local function updateESP(card) if not card:IsA("BasePart") then return end local cardType = getCardType(card) local oldESP = card:FindFirstChild("CardESP") -- Remove old highlight if type changed if oldESP then oldESP:Destroy() end -- Add new highlight if it is a tracked type if colors[cardType] then local highlight = Instance.new("Highlight") highlight.Name = "CardESP" highlight.FillColor = colors[cardType] highlight.OutlineColor = colors[cardType] highlight.FillTransparency = 0.5 highlight.OutlineTransparency = 0 highlight.Adornee = card highlight.Parent = card end end local function trackCard(card) if not card:IsA("BasePart") then return end cardTypes[card.Name] = card:GetAttribute("Item") updateESP(card) card:GetAttributeChangedSignal("Item"):Connect(function() cardTypes[card.Name] = card:GetAttribute("Item") updateESP(card) end) end -- Existing cards for _, card in cardsFolder:GetChildren() do trackCard(card) end -- New cards cardsFolder.ChildAdded:Connect(function(card) task.wait() trackCard(card) end) if remotes then -- Single card reveal local cardRevealed = remotes:FindFirstChild("CardRevealed") if cardRevealed then cardRevealed.OnClientEvent:Connect(function(cardIndex, itemType) local card = cardsFolder:FindFirstChild("Card_" .. cardIndex) if card then cardTypes[card.Name] = itemType updateESP(card) end end) end -- Reveal all cards local revealAll = remotes:FindFirstChild("RevealAllForClient") if revealAll then revealAll.OnClientEvent:Connect(function(cardData) if type(cardData) == "table" then for _, info in ipairs(cardData) do local card = cardsFolder:FindFirstChild("Card_" .. info.index) if card then cardTypes[card.Name] = info.item updateESP(card) end end end end) end -- Reset board local boardReset = remotes:FindFirstChild("BoardReset") if boardReset then boardReset.OnClientEvent:Connect(function() for _, card in cardsFolder:GetChildren() do cardTypes[card.Name] = card:GetAttribute("Item") updateESP(card) end end) end end