На local CollectionService = game:GetService("CollectionService"
local RunService = game:GetService("RunService"
-- Кэш для хранения количества партов
local partCountCache = {}
-- Функция для быстрого подсчета партов с тегом
local function countPartsWithTag(tagName)
return #CollectionService:GetTagged(tagName)
end
-- Функция для создания или обновления тега для партов
local function updatePartTags(partName)
local tagName = "CountMe_" .. partName
for _, object in ipairs(workspace:GetDescendants()) do
if object:IsA("BasePart" and object.Name == partName then
if not CollectionService:HasTag(object, tagName) then
CollectionService:AddTag(object, tagName)
end
elseif CollectionService:HasTag(object, tagName) and (not object:IsA("BasePart" or object.Name ~= partName) then
CollectionService:RemoveTag(object, tagName)
end
end
end
-- Функция для получения количества партов с определенным именем
local function getPartCount(partName)
local tagName = "CountMe_" .. partName
if not partCountCache[partName] then
updatePartTags(partName)
partCountCache[partName] = countPartsWithTag(tagName)
end
return partCountCache[partName]
end
-- Функция для обновления кэша
local function updateCache()
for partName, _ in pairs(partCountCache) do
local tagName = "CountMe_" .. partName
partCountCache[partName] = countPartsWithTag(tagName)
end
end
-- Пример использования
local function exampleUsage()
local partNameToCount = "ExamplePart"
local count = getPartCount(partNameToCount)
print("Количество партов с именем '" .. partNameToCount .. "': " .. count)
-- Добавляем прослушивание изменений
CollectionService:GetInstanceAddedSignal("CountMe_" .. partNameToCount):Connect(function()
print("Парт добавлен! Новое количество: " .. getPartCount(partNameToCount))
end)
CollectionService:GetInstanceRemovedSignal("CountMe_" .. partNameToCount):Connect(function()
print("Парт удален! Новое количество: " .. getPartCount(partNameToCount))
end)
end