local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local TweenService = game:GetService("TweenService")
local CoreGui = game:GetService("CoreGui")
local UserInputService = game:GetService("UserInputService")
local HttpService = game:GetService("HttpService")

local localPlayer = Players.LocalPlayer
local userIdStr = tostring(localPlayer.UserId)

local folderPath = "ASCEND"
local subFolderPath = "ASCEND/CareForPets"
local filePath = "ASCEND/CareForPets/WantedCats.json"

local targetCats = {}
local defaultCats = { "lilac", "espresso", "vanilla bean", "soda" }

local function loadSettings()
	if not isfolder(folderPath) then makefolder(folderPath) end
	if not isfolder(subFolderPath) then makefolder(subFolderPath) end
	
	if isfile(filePath) then
		local success, data = pcall(function()
			return HttpService:JSONDecode(readfile(filePath))
		end)
		if success and type(data) == "table" then
			targetCats = data
		else
			for _, cat in ipairs(defaultCats) do targetCats[cat] = true end
			writefile(filePath, HttpService:JSONEncode(targetCats))
		end
	else
		for _, cat in ipairs(defaultCats) do targetCats[cat] = true end
		writefile(filePath, HttpService:JSONEncode(targetCats))
	end
end

local function saveSettings()
	writefile(filePath, HttpService:JSONEncode(targetCats))
end

loadSettings()

local showPermPets = true

local playerBases = Workspace:FindFirstChild("PlayerBases")
local myBase = playerBases and playerBases:FindFirstChild(userIdStr)
local baseCatsFolder = myBase and myBase:FindFirstChild("Cats")

local cafeInteriors = Workspace:FindFirstChild("CafeInteriors")
local myCafe = cafeInteriors and cafeInteriors:FindFirstChild(userIdStr)
local cafeCatsFolder = myCafe and myCafe:FindFirstChild("CafeCats")

if not baseCatsFolder or not cafeCatsFolder then return end

local screenGui = Instance.new("ScreenGui")
screenGui.Name = "DarkCastleCatTracker"
screenGui.ResetOnSpawn = false
screenGui.Parent = CoreGui

local mainFrame = Instance.new("Frame")
mainFrame.Size = UDim2.new(0, 520, 0, 255)
mainFrame.Position = UDim2.new(0.5, -260, 0.1, 0)
mainFrame.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
mainFrame.BorderSizePixel = 0
mainFrame.ClipsDescendants = true
mainFrame.Active = true
mainFrame.Parent = screenGui

local uiCorner = Instance.new("UICorner")
uiCorner.CornerRadius = UDim.new(0, 8)
uiCorner.Parent = mainFrame

local dragButton = Instance.new("TextButton")
dragButton.Size = UDim2.new(1, 0, 1, 0)
dragButton.Position = UDim2.new(0, 0, 0, 0)
dragButton.BackgroundTransparency = 1
dragButton.Text = ""
dragButton.ZIndex = 1
dragButton.Parent = mainFrame

local leftPanel = Instance.new("Frame")
leftPanel.Size = UDim2.new(0, 180, 1, -20)
leftPanel.Position = UDim2.new(0, 10, 0, 10)
leftPanel.BackgroundColor3 = Color3.fromRGB(22, 22, 22)
leftPanel.BorderSizePixel = 0
leftPanel.Active = false
leftPanel.ZIndex = 2
leftPanel.Parent = mainFrame

local leftCorner = Instance.new("UICorner")
leftCorner.CornerRadius = UDim.new(0, 6)
leftCorner.Parent = leftPanel

local leftTitle = Instance.new("TextLabel")
leftTitle.Size = UDim2.new(1, -30, 0, 30)
leftTitle.BackgroundTransparency = 1
leftTitle.Font = Enum.Font.GothamBold
leftTitle.Text = " WANTED CATS"
leftTitle.TextColor3 = Color3.fromRGB(180, 0, 0)
leftTitle.TextSize = 13
leftTitle.TextXAlignment = Enum.TextXAlignment.Left
leftTitle.ZIndex = 3
leftTitle.Parent = leftPanel

local minBtn = Instance.new("TextButton")
minBtn.Size = UDim2.new(0, 20, 0, 20)
minBtn.Position = UDim2.new(1, -25, 0, 5)
minBtn.BackgroundTransparency = 1
minBtn.Font = Enum.Font.GothamBold
minBtn.Text = "v"
minBtn.TextColor3 = Color3.fromRGB(120, 120, 120)
minBtn.TextSize = 14
minBtn.ZIndex = 6
minBtn.Parent = leftPanel

local leftList = Instance.new("TextLabel")
leftList.Size = UDim2.new(1, -20, 1, -75)
leftList.Position = UDim2.new(0, 10, 0, 35)
leftList.BackgroundTransparency = 1
leftList.Font = Enum.Font.GothamMedium
leftList.Text = ""
leftList.TextColor3 = Color3.fromRGB(160, 160, 160)
leftList.TextSize = 13
leftList.TextYAlignment = Enum.TextYAlignment.Top
leftList.TextXAlignment = Enum.TextXAlignment.Left
leftList.LineHeight = 1.3
leftList.ZIndex = 3
leftList.Parent = leftPanel

local catInput = Instance.new("TextBox")
catInput.Size = UDim2.new(1, -20, 0, 24)
catInput.Position = UDim2.new(0, 10, 1, -34)
catInput.BackgroundColor3 = Color3.fromRGB(15, 15, 15)
catInput.BorderSizePixel = 0
catInput.Font = Enum.Font.Gotham
catInput.PlaceholderText = "Add/Remove Cat..."
catInput.PlaceholderColor3 = Color3.fromRGB(80, 80, 80)
catInput.Text = ""
catInput.TextColor3 = Color3.fromRGB(200, 200, 200)
catInput.TextSize = 12
catInput.ZIndex = 4
catInput.ClearTextOnFocus = true
catInput.Parent = leftPanel

local inputCorner = Instance.new("UICorner")
inputCorner.CornerRadius = UDim.new(0, 4)
inputCorner.Parent = catInput

local baseContainer = Instance.new("Frame")
baseContainer.Size = UDim2.new(0, 310, 0, 95)
baseContainer.Position = UDim2.new(0, 200, 0, 10)
baseContainer.BackgroundColor3 = Color3.fromRGB(22, 22, 22)
baseContainer.BorderSizePixel = 0
baseContainer.ClipsDescendants = true
baseContainer.Active = false
baseContainer.ZIndex = 2
baseContainer.Parent = mainFrame

local baseContainerCorner = Instance.new("UICorner")
baseContainerCorner.CornerRadius = UDim.new(0, 6)
baseContainerCorner.Parent = baseContainer

local baseTitle = Instance.new("TextLabel")
baseTitle.Size = UDim2.new(1, 0, 0, 25)
baseTitle.BackgroundColor3 = Color3.fromRGB(28, 28, 28)
baseTitle.BorderSizePixel = 0
baseTitle.Font = Enum.Font.GothamBold
baseTitle.Text = "  BASE CATS"
baseTitle.TextColor3 = Color3.fromRGB(200, 200, 200)
baseTitle.TextSize = 11
baseTitle.TextXAlignment = Enum.TextXAlignment.Left
baseTitle.ZIndex = 3
baseTitle.Parent = baseContainer

local basePanel = Instance.new("ScrollingFrame")
basePanel.Size = UDim2.new(1, 0, 1, -25)
basePanel.Position = UDim2.new(0, 0, 0, 25)
basePanel.BackgroundTransparency = 1
basePanel.BorderSizePixel = 0
basePanel.CanvasSize = UDim2.new(0, 0, 0, 0)
basePanel.AutomaticCanvasSize = Enum.AutomaticSize.Y
basePanel.ScrollBarThickness = 2
basePanel.ZIndex = 3
basePanel.Parent = baseContainer

local baseLayout = Instance.new("UIListLayout")
baseLayout.Padding = UDim.new(0, 4)
baseLayout.Parent = basePanel

local cafeContainer = Instance.new("Frame")
cafeContainer.Size = UDim2.new(0, 310, 0, 95)
cafeContainer.Position = UDim2.new(0, 200, 0, 115)
cafeContainer.BackgroundColor3 = Color3.fromRGB(22, 22, 22)
cafeContainer.BorderSizePixel = 0
cafeContainer.ClipsDescendants = true
cafeContainer.Active = false
cafeContainer.ZIndex = 2
cafeContainer.Parent = mainFrame

local cafeContainerCorner = Instance.new("UICorner")
cafeContainerCorner.CornerRadius = UDim.new(0, 6)
cafeContainerCorner.Parent = cafeContainer

local cafeTitle = Instance.new("TextLabel")
cafeTitle.Size = UDim2.new(1, 0, 0, 25)
cafeTitle.BackgroundColor3 = Color3.fromRGB(28, 28, 28)
cafeTitle.BorderSizePixel = 0
cafeTitle.Font = Enum.Font.GothamBold
cafeTitle.Text = "  CAFE CATS"
cafeTitle.TextColor3 = Color3.fromRGB(200, 200, 200)
cafeTitle.TextSize = 11
cafeTitle.TextXAlignment = Enum.TextXAlignment.Left
cafeTitle.ZIndex = 3
cafeTitle.Parent = cafeContainer

local cafePanel = Instance.new("ScrollingFrame")
cafePanel.Size = UDim2.new(1, 0, 1, -25)
cafePanel.Position = UDim2.new(0, 0, 0, 25)
cafePanel.BackgroundTransparency = 1
cafePanel.BorderSizePixel = 0
cafePanel.CanvasSize = UDim2.new(0, 0, 0, 0)
cafePanel.AutomaticCanvasSize = Enum.AutomaticSize.Y
cafePanel.ScrollBarThickness = 2
cafePanel.ZIndex = 3
cafePanel.Parent = cafeContainer

local cafeLayout = Instance.new("UIListLayout")
cafeLayout.Padding = UDim.new(0, 4)
cafeLayout.Parent = cafePanel

local checkboxContainer = Instance.new("Frame")
checkboxContainer.Size = UDim2.new(0, 310, 0, 20)
checkboxContainer.Position = UDim2.new(0, 200, 0, 222)
checkboxContainer.BackgroundTransparency = 1
checkboxContainer.ZIndex = 3
checkboxContainer.Parent = mainFrame

local checkboxBtn = Instance.new("TextButton")
checkboxBtn.Size = UDim2.new(0, 14, 0, 14)
checkboxBtn.Position = UDim2.new(0, 2, 0, 3)
checkboxBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
checkboxBtn.BorderSizePixel = 0
checkboxBtn.Font = Enum.Font.GothamBold
checkboxBtn.Text = "βœ“"
checkboxBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
checkboxBtn.TextSize = 11
checkboxBtn.ZIndex = 4
checkboxBtn.Parent = checkboxContainer

local checkboxCorner = Instance.new("UICorner")
checkboxCorner.CornerRadius = UDim.new(0, 3)
checkboxCorner.Parent = checkboxBtn

local checkboxLabel = Instance.new("TextLabel")
checkboxLabel.Size = UDim2.new(1, -25, 1, 0)
checkboxLabel.Position = UDim2.new(0, 22, 0, 0)
checkboxLabel.BackgroundTransparency = 1
checkboxLabel.Font = Enum.Font.GothamMedium
checkboxLabel.Text = "Show Perm Pets"
checkboxLabel.TextColor3 = Color3.fromRGB(160, 160, 160)
checkboxLabel.TextSize = 12
checkboxLabel.TextXAlignment = Enum.TextXAlignment.Left
checkboxLabel.ZIndex = 4
checkboxLabel.Parent = checkboxContainer

local dragging, dragInput, dragStart, startPos
local dragTotalDelta = 0

local function updateDrag(input)
	local delta = input.Position - dragStart
	dragTotalDelta = dragTotalDelta + delta.Magnitude
	mainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y)
end

local function setupDrag(guiElement)
	guiElement.InputBegan:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
			dragging = true
			dragStart = input.Position
			startPos = mainFrame.Position
			dragTotalDelta = 0
			input.Changed:Connect(function()
				if input.UserInputState == Enum.UserInputState.End then
					dragging = false
				end
			end)
		end
	end)

	guiElement.InputChanged:Connect(function(input)
		if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then
			dragInput = input
		end
	end)
end

setupDrag(dragButton)

UserInputService.InputChanged:Connect(function(input)
	if input == dragInput and dragging then
		updateDrag(input)
	end
end)

local function updateLeftPanelText()
	local text = ""
	for cat, _ in pairs(targetCats) do
		local formattedName = cat:gsub("(%a)([%w_']*)", function(first, rest) return first:upper()..rest:lower() end)
		text = text .. "β€’ " .. formattedName .. "\n"
	end
	leftList.Text = text
end

local function updateList(folder, uiPanel)
	for _, child in ipairs(uiPanel:GetChildren()) do
		if child:IsA("TextLabel") then child:Destroy() end
	end

	for _, cat in ipairs(folder:GetChildren()) do
		local isPerma = cat:GetAttribute("isPermaPet")
		if not showPermPets and isPerma == true then continue end

		local lbl = Instance.new("TextLabel")
		lbl.Size = UDim2.new(1, -10, 0, 20)
		lbl.BackgroundTransparency = 1
		lbl.Font = Enum.Font.Gotham
		lbl.Text = "  " .. cat.Name
		lbl.TextSize = 13
		lbl.ZIndex = 4
		
		local cleanName = string.lower(cat.Name)
		if targetCats[cleanName] then
			if isPerma == true then
				lbl.TextColor3 = Color3.fromRGB(0, 180, 100)
			else
				lbl.TextColor3 = Color3.fromRGB(255, 70, 70)
			end
		else
			lbl.TextColor3 = Color3.fromRGB(170, 170, 170)
		end
		
		lbl.TextXAlignment = Enum.TextXAlignment.Left
		lbl.Parent = uiPanel
	end
end

catInput.FocusLost:Connect(function(enterPressed)
	if not enterPressed or catInput.Text == "" then return end
	
	local text = string.lower(catInput.Text):match("^%s*(.-)%s*$")
	if targetCats[text] then
		targetCats[text] = nil
	else
		targetCats[text] = true
	end
	
	saveSettings()
	updateLeftPanelText()
	updateList(baseCatsFolder, basePanel)
	updateList(cafeCatsFolder, cafePanel)
	catInput.Text = ""
end)

local minimized = false
local tweenInfo = TweenInfo.new(0.3, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out)

minBtn.MouseButton1Click:Connect(function()
	minimized = not minimized
	
	local targetSize, targetPosOffset
	if minimized then
		targetSize = UDim2.new(0, 180, 0, 30)
		targetPosOffset = Vector2.new(170, 112)
		minBtn.Text = "^"
		
		leftPanel.Size = UDim2.new(1, 0, 1, 0)
		leftPanel.Position = UDim2.new(0, 0, 0, 0)
		leftList.Visible = false
		catInput.Visible = false
		baseContainer.Visible = false
		cafeContainer.Visible = false
		checkboxContainer.Visible = false
	else
		targetSize = UDim2.new(0, 520, 0, 255)
		targetPosOffset = Vector2.new(-170, -112)
		minBtn.Text = "v"
		
		leftPanel.Size = UDim2.new(0, 180, 1, -20)
		leftPanel.Position = UDim2.new(0, 10, 0, 10)
		leftList.Visible = true
		catInput.Visible = true
		baseContainer.Visible = true
		cafeContainer.Visible = true
		checkboxContainer.Visible = true
	end
	
	local currentPos = mainFrame.Position
	local newPos = UDim2.new(currentPos.X.Scale, currentPos.X.Offset + targetPosOffset.X, currentPos.Y.Scale, currentPos.Y.Offset + targetPosOffset.Y)
	
	TweenService:Create(mainFrame, tweenInfo, {Size = targetSize, Position = newPos}):Play()
end)

local function alertUI(catName, location)
	local alert = Instance.new("Frame")
	alert.Size = UDim2.new(0, 260, 0, 50)
	alert.Position = UDim2.new(1, 30, 0.8, 0)
	alert.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
	alert.BorderSizePixel = 0
	alert.ClipsDescendants = true
	alert.Parent = screenGui

	local aCorner = Instance.new("UICorner")
	aCorner.CornerRadius = UDim.new(0, 6)
	aCorner.Parent = alert

	local line = Instance.new("Frame")
	line.Size = UDim2.new(0, 4, 1, 0)
	line.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
	line.BorderSizePixel = 0
	line.Parent = alert

	local txt = Instance.new("TextLabel")
	txt.Size = UDim2.new(1, -20, 1, 0)
	txt.Position = UDim2.new(0, 15, 0, 0)
	txt.BackgroundTransparency = 1
	txt.Font = Enum.Font.GothamMedium
	txt.Text = string.format("%s SPAWNED (%s)", string.upper(catName), location)
	txt.TextColor3 = Color3.fromRGB(240, 240, 240)
	txt.TextSize = 12
	txt.TextXAlignment = Enum.TextXAlignment.Left
	txt.Parent = alert

	local tInfo = TweenInfo.new(0.4, Enum.EasingStyle.Cubic, Enum.EasingDirection.Out)
	TweenService:Create(alert, tInfo, {Position = UDim2.new(1, -280, 0.8, 0)}):Play()

	task.delay(4, function()
		local close = TweenService:Create(alert, tInfo, {Position = UDim2.new(1, 30, 0.8, 0)})
		close:Play()
		close.Completed:Connect(function() alert:Destroy() end)
	end)
end

checkboxBtn.MouseButton1Click:Connect(function()
	showPermPets = not showPermPets
	if showPermPets then
		checkboxBtn.BackgroundColor3 = Color3.fromRGB(180, 0, 0)
		checkboxBtn.Text = "βœ“"
	else
		checkboxBtn.BackgroundColor3 = Color3.fromRGB(35, 35, 35)
		checkboxBtn.Text = ""
	end
	updateList(baseCatsFolder, basePanel)
	updateList(cafeCatsFolder, cafePanel)
end)

baseCatsFolder.ChildAdded:Connect(function(child)
	updateList(baseCatsFolder, basePanel)
	task.wait(0.05)
	if targetCats[string.lower(child.Name)] then
		local isPerma = child:GetAttribute("isPermaPet")
		if isPerma ~= true then
			alertUI(child.Name, "BASE")
		end
	end
end)
baseCatsFolder.ChildRemoved:Connect(function() updateList(baseCatsFolder, basePanel) end)

cafeCatsFolder.ChildAdded:Connect(function(child)
	updateList(cafeCatsFolder, cafePanel)
	task.wait(0.05)
	if targetCats[string.lower(child.Name)] then
		local isPerma = child:GetAttribute("isPermaPet")
		if isPerma ~= true then
			alertUI(child.Name, "CAFE")
		end
	end
end)
cafeCatsFolder.ChildRemoved:Connect(function() updateList(cafeCatsFolder, cafePanel) end)

updateLeftPanelText()
updateList(baseCatsFolder, basePanel)
updateList(cafeCatsFolder, cafePanel)
[🌴] Care for Cats Cat Notifier
843 views
3 months ago

Cat Notifier

WORKING
Free

Description

Cat notifier when they spawn.

has ui

good enough

improve yourself πŸ€·β€β™‚οΈπŸ€·β€β™‚οΈπŸ˜‚πŸ˜

Related Scripts