Загрузка данных
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)