Загрузка данных


local shopModel = Instance.new("Model", workspace)
shopModel.Name = "CompleteBubbleShop"

print("Генерируем геометрию, это может занять пару секунд (работает CSG)...")

-- 1. БОЛВАНКИ ДЛЯ ВЫРЕЗАНИЯ
local baseDome = Instance.new("Part")
baseDome.Shape = Enum.PartType.Ball
baseDome.Size = Vector3.new(30, 30, 30)
baseDome.Position = Vector3.new(0, 0, -20) -- Центр на земле

-- Срезаем пол (всю нижнюю половину сферы)
local floorCut = Instance.new("Part")
floorCut.Size = Vector3.new(35, 30, 35)
floorCut.Position = Vector3.new(0, -15, -20)

-- Вырезаем внутренности (делаем здание полым внутри)
local hollowCut = Instance.new("Part")
hollowCut.Shape = Enum.PartType.Ball
hollowCut.Size = Vector3.new(28, 28, 28)
hollowCut.Position = Vector3.new(0, 0, -20)

-- Вырезаем арку (дверь во фронтальной стене)
local doorCut = Instance.new("Part")
doorCut.Shape = Enum.PartType.Cylinder
doorCut.Size = Vector3.new(20, 12, 12)
-- Поворачиваем цилиндр, чтобы пробить стену
doorCut.CFrame = CFrame.new(0, 0, -5) * CFrame.Angles(0, math.rad(90), 0)

-- 2. ВЫПОЛНЯЕМ ВЫРЕЗАНИЕ
local success, finalDome = pcall(function()
    return baseDome:SubtractAsync({floorCut, hollowCut, doorCut})
end)

if success and finalDome then
    finalDome.Name = "MainBuilding"
    finalDome.UsePartColor = true
    finalDome.Color = Color3.fromRGB(220, 166, 255) -- Нежно-фиолетовый купол
    finalDome.Material = Enum.Material.SmoothPlastic
    finalDome.Anchored = true
    finalDome.Parent = shopModel
else
    warn("Студия не смогла вырезать геометрию кодом. Попробуй сделать Union руками.")
end

-- 3. СЛИВОЧНАЯ ШАПКА
local foamPos = {
    CFrame.new(0, 14, -20),
    CFrame.new(6, 12, -16),
    CFrame.new(-6, 12, -24),
    CFrame.new(5, 11, -25),
    CFrame.new(-7, 11, -15)
}

for i, cf in ipairs(foamPos) do
    local foam = Instance.new("Part")
    foam.Shape = Enum.PartType.Ball
    foam.Size = Vector3.new(14, 8, 14) -- Сплюснутые шары для эффекта пены
    foam.CFrame = cf
    foam.Color = Color3.fromRGB(255, 250, 250)
    foam.Material = Enum.Material.SmoothPlastic
    foam.Anchored = true
    foam.Parent = shopModel
end

-- 4. МЫЛЬНЫЕ ПУЗЫРИ НА КРЫШЕ (Декор)
local bubbleColors = {Color3.fromRGB(255, 158, 225), Color3.fromRGB(82, 245, 255), Color3.fromRGB(255, 242, 117)}
for i = 1, 8 do
    local bubble = Instance.new("Part")
    bubble.Shape = Enum.PartType.Ball
    local size = math.random(3, 6)
    bubble.Size = Vector3.new(size, size, size)
    
    -- Рандомная позиция на "кремовой" крыше
    local offsetX = math.random(-8, 8)
    local offsetZ = math.random(-8, 8)
    bubble.Position = Vector3.new(offsetX, 17 + (size/2), -20 + offsetZ)
    
    bubble.Color = bubbleColors[math.random(1, #bubbleColors)]
    
    -- Миксуем стеклянные и неоновые пузыри
    if math.random() > 0.5 then
        bubble.Material = Enum.Material.Glass
        bubble.Transparency = 0.5
    else
        bubble.Material = Enum.Material.Neon
    end
    
    bubble.Anchored = true
    bubble.Parent = shopModel
end

-- 5. ВЫВЕСКА-ЛЕДЕНЕЦ У ВХОДА
local pole = Instance.new("Part")
pole.Shape = Enum.PartType.Cylinder
pole.Size = Vector3.new(12, 1, 1)
pole.CFrame = CFrame.new(12, 4, -10) * CFrame.Angles(0, 0, math.rad(90))
pole.Color = Color3.fromRGB(255, 255, 255)
pole.Anchored = true
pole.Parent = shopModel

local coin = Instance.new("Part")
coin.Shape = Enum.PartType.Cylinder
coin.Size = Vector3.new(1, 5, 5)
coin.CFrame = CFrame.new(12, 10, -10) * CFrame.Angles(0, math.rad(90), 0)
coin.Color = Color3.fromRGB(255, 242, 117)
coin.Material = Enum.Material.Neon
coin.Anchored = true
coin.Parent = shopModel

-- Фокус камеры на готовый магазин
game.Selection:Set({shopModel})
print("Готово! Полноценный Bubble Shop сгенерирован.")