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


local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")

local GameConfig = require(ReplicatedStorage:WaitForChild("GameConfig"))
local soundEvent = GameConfig.GetRemoteEvent("MakeNoiseEvent")

--------------------------------------------------------------------------------
-- ГЕНЕРАТОР СУПЕР-ДЕТАЛИЗИРОВАННОГО ГИПЕРМАРКЕТА "РЕМСТРОЙ"
--------------------------------------------------------------------------------
local storeFolder = Instance.new("Folder")
storeFolder.Name = "DetailedRemStroy"
storeFolder.Parent = workspace

-- Функция для легкого создания деталей
local function createPart(parent, size, pos, color, material, anchored)
	local p = Instance.new("Part")
	p.Size = size
	p.Position = pos
	p.BrickColor = BrickColor.new(color)
	p.Material = material or Enum.Material.Plastic
	p.Anchored = (anchored == nil) and true or anchored
	p.Parent = parent
	return p
end

-- 1. ПОЛ, ПОТОЛОК И СТЕНЫ ЗДАНИЯ
local floor = createPart(storeFolder, Vector3.new(240, 1, 240), Vector3.new(0, 0, 0), "Dark stone grey", Enum.Material.Concrete)
local ceiling = createPart(storeFolder, Vector3.new(240, 1, 240), Vector3.new(0, 30, 0), "Medium stone grey", Enum.Material.Concrete)

-- Стены с вывесками
local backWall = createPart(storeFolder, Vector3.new(240, 30, 1), Vector3.new(0, 15, 120), "Really black", Enum.Material.Brick)

--------------------------------------------------------------------------------
-- 2. КАССОВАЯ ЗОНА (ВЫХОД)
--------------------------------------------------------------------------------
for x = -80, 80, 40 do
	-- Кассовый стол
	local counter = createPart(storeFolder, Vector3.new(12, 4, 6), Vector3.new(x, 2, -90), "Dark grey", Enum.Material.Metal)
	-- Кассовая лента
	local belt = createPart(storeFolder, Vector3.new(8, 0.2, 3), Vector3.new(x, 4.1, -90), "Black", Enum.Material.SmoothPlastic)
	-- Монитор кассы
	local screen = createPart(storeFolder, Vector3.new(2, 2, 0.5), Vector3.new(x - 4, 5.5, -90), "Light blue", Enum.Material.Glass)
	-- Сканер штрихкодов
	local scanner = createPart(storeFolder, Vector3.new(1, 1, 1), Vector3.new(x + 2, 4.5, -90), "Bright red", Enum.Material.Neon)
end

--------------------------------------------------------------------------------
-- 3. СТЕЛЛАЖИ С МЕЛКИМИ ДЕТАЛЯМИ (РЯДЫ)
--------------------------------------------------------------------------------
local paintColors = {"Bright red", "Bright blue", "Bright yellow", "Bright green", "White", "Dark orange"}

for row = -60, 60, 40 do
	for col = -50, 50, 25 do
		-- Основные металлические стойки стеллажа
		local shelfColor = "Deep orange" -- Фирменный цвет строительных стеллажей
		local baseShelf = createPart(storeFolder, Vector3.new(10, 18, 30), Vector3.new(row, 9, col), shelfColor, Enum.Material.DiamondPlate)
		baseShelf.Transparency = 0.8 -- Делаем каркас «решетчатым»
		
		-- Горизонтальные полки (3 яруса)
		for shelfLevel = 2, 14, 6 do
			local shelfBoard = createPart(storeFolder, Vector3.new(9.8, 0.5, 29.8), Vector3.new(row, shelfLevel, col), "Medium stone grey", Enum.Material.Metal)
			
			--------------------------------------------------------------------
			-- ЗАПОЛНЕНИЕ ПОЛОК МЕЛКИМИ ПРЕДМЕТАМИ
			--------------------------------------------------------------------
			-- Отдел 1: Лакокрасочные банки (разные цвета)
			if row < 0 then
				for zOffset = -12, 12, 3 do
					for xOffset = -3, 3, 3 do
						local can = createPart(storeFolder, Vector3.new(1.2, 1.8, 1.2), Vector3.new(row + xOffset, shelfLevel + 1.1, col + zOffset), "Aluminum", Enum.Material.Metal)
						can.Shape = Enum.PartType.Cylinder
						can.Orientation = Vector3.new(0, 0, 90)
						
						-- Цветная крышка банки
						local cap = createPart(storeFolder, Vector3.new(1.25, 0.2, 1.25), Vector3.new(row + xOffset, shelfLevel + 2, col + zOffset), paintColors[math.random(#paintColors)], Enum.Material.SmoothPlastic)
						cap.Shape = Enum.PartType.Cylinder
						cap.Orientation = Vector3.new(0, 0, 90)
					end
				end
				
			-- Отдел 2: Мешки с цементом / сухими смесями
			elseif row == 0 then
				for zOffset = -10, 10, 5 do
					local bag = createPart(storeFolder, Vector3.new(4, 1.5, 2.5), Vector3.new(row, shelfLevel + 1, col + zOffset), "Sand yellow", Enum.Material.Fabric)
					bag.Orientation = Vector3.new(0, math.random(-15, 15), 0)
				end
				
			-- Отдел 3: Ящики с метизами (болты, гайки, шурупы)
			else
				for zOffset = -12, 12, 4 do
					-- Пластиковый контейнер
					local box = createPart(storeFolder, Vector3.new(3, 1.2, 2.5), Vector3.new(row, shelfLevel + 0.8, col + zOffset), "Transparent", Enum.Material.SmoothPlastic)
					box.Transparency = 0.4
					
					-- Мелкие "шурупы/детали" внутри ящика
					for i = 1, 3 do
						local screw = createPart(storeFolder, Vector3.new(0.3, 0.3, 0.3), Vector3.new(row + math.random(-1,1)*0.5, shelfLevel + 0.5, col + zOffset + math.random(-1,1)*0.5), "Customi", Enum.Material.Metal)
					end
				end
			end
		end
		
		-- АВАРИЙНЫЙ ХАОС: Некоторые полки сломаны, банки валяются на полу
		if math.random(1, 4) == 1 then
			-- Пролитая краска на полу
			local spill = createPart(storeFolder, Vector3.new(5, 0.05, 5), Vector3.new(row + 6, 0.55, col), paintColors[math.random(#paintColors)], Enum.Material.SmoothPlastic)
			-- Упавшая банка
			local fallenCan = createPart(storeFolder, Vector3.new(1.2, 1.8, 1.2), Vector3.new(row + 5, 0.8, col + 1), "Aluminum", Enum.Material.Metal)
			fallenCan.Orientation = Vector3.new(0, 0, 0) -- Лежит боком
		end
	end
end

--------------------------------------------------------------------------------
-- 4. СВЕТИЛЬНИКИ ПОД ПОТОЛКОМ И СВИСАЮЩИЕ ПРОВОДА
--------------------------------------------------------------------------------
for x = -100, 100, 50 do
	for z = -100, 100, 50 do
		-- Металлический трос
		local wire = createPart(storeFolder, Vector3.new(0.2, 8, 0.2), Vector3.new(x, 26, z), "Black", Enum.Material.Metal)
		-- Промышленная лампа
		local lamp = createPart(storeFolder, Vector3.new(6, 1, 2), Vector3.new(x, 21.5, z), "Medium stone grey", Enum.Material.Metal)
		
		-- Светящаяся панель
		local neonLight = createPart(storeFolder, Vector3.new(5.6, 0.2, 1.6), Vector3.new(x, 20.9, z), "Warm white", Enum.Material.Neon)
		
		-- Источник света для атмосферы
		local pointLight = Instance.new("PointLight")
		pointLight.Brightness = math.random(1, 3) == 1 and 0.2 or 1.5 -- Некоторые лампы полумигают/сломаны
		pointLight.Range = 35
		pointLight.Color = Color3.fromRGB(255, 230, 200)
		pointLight.Parent = neonLight
	end
end

--------------------------------------------------------------------------------
-- 5. СПАВН ИИ МОНСТРА (УБОРЩИК-ПОГРУЗЧИК)
--------------------------------------------------------------------------------
local monster = Instance.new("Model")
monster.Name = "CleanerMonster"

local body = createPart(monster, Vector3.new(5, 6, 7), Vector3.new(0, 4, 100), "Dark green", Enum.Material.DiamondPlate, false)
body.Name = "Head"

-- Красный мигающий маячок монстра
local beacon = createPart(monster, Vector3.new(1, 1, 1), Vector3.new(0, 7.5, 100), "Really red", Enum.Material.Neon, false)
local light = Instance.new("PointLight")
light.Color = Color3.fromRGB(255, 0, 0)
light.Brightness = 5
light.Range = 25
light.Parent = beacon

local weld = Instance.new("WeldConstraint")
weld.Part0 = body
weld.Part1 = beacon
weld.Parent = body

local humanoid = Instance.new("Humanoid")
humanoid.Parent = monster
monster.PrimaryPart = body
monster.Parent = workspace

-- Слух монстра
soundEvent.OnServerEvent:Connect(function(player, noisePosition)
	local dist = (body.Position - noisePosition).Magnitude
	if dist <= GameConfig.MonsterSettings.LoudNoiseRadius then
		humanoid.WalkSpeed = GameConfig.MonsterSettings.ChasingSpeed
		humanoid:MoveTo(noisePosition)
	end
end)