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


-- ЛАБОРАТОРИЯ ЧП — РЕТРО СТИЛЬ R6
-- Вставь в Command Bar и нажми Enter

local C = {
    asphalt = Color3.fromRGB(99, 95, 98),
    grass = Color3.fromRGB(75, 151, 75),
    wall_white = Color3.fromRGB(240, 240, 240),
    wall_grey = Color3.fromRGB(163, 162, 165),
    roof = Color3.fromRGB(50, 50, 50),
    fence = Color3.fromRGB(99, 95, 98),
    door = Color3.fromRGB(124, 92, 70),
    crate = Color3.fromRGB(196, 40, 28),
    barrel = Color3.fromRGB(80, 80, 80),
    warning = Color3.fromRGB(196, 40, 28),
    light = Color3.fromRGB(245, 205, 48),
    glass = Color3.fromRGB(180, 210, 255),
    tent = Color3.fromRGB(255, 255, 255)
}

function part(name, size, pos, color, parent, transparency)
    local p = Instance.new("Part")
    p.Name = name
    p.Size = size
    p.CFrame = CFrame.new(pos)
    p.Color = color
    p.Material = Enum.Material.Plastic
    p.Anchored = true
    p.TopSurface = Enum.SurfaceType.Studs
    p.BottomSurface = Enum.SurfaceType.Inlet
    p.Transparency = transparency or 0
    p.Parent = parent
    return p
end

function wall(name, size, pos, color, parent)
    local w = part(name, size, pos, color, parent)
    w.TopSurface = Enum.SurfaceType.Smooth
    w.BottomSurface = Enum.SurfaceType.Smooth
    w.LeftSurface = Enum.SurfaceType.Studs
    w.RightSurface = Enum.SurfaceType.Studs
    return w
end

-- ОЧИСТКА СТАРОГО
local oldMap = workspace:FindFirstChild("Map")
if oldMap then oldMap:Destroy() end
local oldNPCs = workspace:FindFirstChild("NPCs")
if oldNPCs then oldNPCs:Destroy() end
local oldSpawns = workspace:FindFirstChild("Spawns")
if oldSpawns then oldSpawns:Destroy() end

-- ПАПКИ
local map = Instance.new("Folder")
map.Name = "Map"
map.Parent = workspace

local npcs = Instance.new("Folder")
npcs.Name = "NPCs"
npcs.Parent = workspace

local spawns = Instance.new("Folder")
spawns.Name = "Spawns"
spawns.Parent = workspace

-- ==================== УЛИЦА ====================
part("Ground", Vector3.new(300, 1, 300), Vector3.new(0, 0, 0), C.asphalt, map)

local grassN = part("GrassNorth", Vector3.new(300, 1, 30), Vector3.new(0, -0.5, -165), C.grass, map)
grassN.TopSurface = Enum.SurfaceType.Studs
local grassS = part("GrassSouth", Vector3.new(300, 1, 30), Vector3.new(0, -0.5, 165), C.grass, map)
grassS.TopSurface = Enum.SurfaceType.Studs
local grassE = part("GrassEast", Vector3.new(30, 1, 240), Vector3.new(165, -0.5, 0), C.grass, map)
grassE.TopSurface = Enum.SurfaceType.Studs
local grassW = part("GrassWest", Vector3.new(30, 1, 240), Vector3.new(-165, -0.5, 0), C.grass, map)
grassW.TopSurface = Enum.SurfaceType.Studs

-- ==================== ЗАБОР ====================
for _, z in pairs({-135, 135}) do
    for x = -135, 135, 10 do
        if math.random() > 0.15 then
            wall("Fence", Vector3.new(1, 8, 10), Vector3.new(x, 4, z), C.fence, map)
        end
    end
end

for _, x in pairs({-135, 135}) do
    for z = -135, 135, 10 do
        if math.random() > 0.15 then
            wall("Fence", Vector3.new(10, 8, 1), Vector3.new(x, 4, z), C.fence, map)
        end
    end
end

-- ==================== РЕСЕПШН ====================
local rx, rz = -80, -80
local reception = Instance.new("Folder")
reception.Name = "Reception"
reception.Parent = map

wall("WallBack", Vector3.new(40, 15, 1), Vector3.new(rx, 7.5, rz - 20), C.wall_white, reception)
wall("WallLeft", Vector3.new(1, 15, 40), Vector3.new(rx - 20, 7.5, rz), C.wall_white, reception)
wall("WallRight", Vector3.new(1, 15, 40), Vector3.new(rx + 20, 7.5, rz), C.wall_white, reception)
wall("WallFrontTop", Vector3.new(40, 5, 1), Vector3.new(rx, 12.5, rz + 20), C.wall_white, reception)
wall("WallFrontLeft", Vector3.new(14, 10, 1), Vector3.new(rx - 13, 5, rz + 20), C.wall_white, reception)
wall("WallFrontRight", Vector3.new(14, 10, 1), Vector3.new(rx + 13, 5, rz + 20), C.wall_white, reception)

local door = part("Door", Vector3.new(12, 10, 1), Vector3.new(rx, 5, rz + 20), C.door, reception)
door.TopSurface = Enum.SurfaceType.Smooth

part("Roof", Vector3.new(42, 1, 42), Vector3.new(rx, 15.5, rz), C.roof, reception)

part("WindowLeft", Vector3.new(1, 6, 10), Vector3.new(rx - 20.5, 7, rz - 5), C.glass, reception, 0.3)
part("WindowRight", Vector3.new(1, 6, 10), Vector3.new(rx + 20.5, 7, rz + 5), C.glass, reception, 0.3)

part("Desk", Vector3.new(12, 3, 4), Vector3.new(rx, 1.5, rz + 10), C.wall_grey, reception)

-- ==================== КЛАДОВКА ====================
local kx, kz = 80, 80
local storage = Instance.new("Folder")
storage.Name = "Storage"
storage.Parent = map

wall("WallBack", Vector3.new(25, 12, 1), Vector3.new(kx, 6, kz - 12), C.wall_grey, storage)
wall("WallLeft", Vector3.new(1, 12, 25), Vector3.new(kx - 12, 6, kz), C.wall_grey, storage)
wall("WallRight", Vector3.new(1, 12, 25), Vector3.new(kx + 12, 6, kz), C.wall_grey, storage)
wall("WallFront", Vector3.new(25, 12, 1), Vector3.new(kx, 6, kz + 12), C.wall_grey, storage)

part("Roof", Vector3.new(27, 1, 27), Vector3.new(kx, 12.5, kz), C.roof, storage)

local sdoor = part("Door", Vector3.new(8, 8, 1), Vector3.new(kx, 4, kz + 12.5), C.door, storage)
sdoor.TopSurface = Enum.SurfaceType.Smooth

for i = 1, 5 do
    local crate = part("Crate"..i, Vector3.new(4, 4, 4), Vector3.new(kx + math.random(-8, 8), 2, kz + math.random(-8, 8)), C.crate, storage)
    crate.TopSurface = Enum.SurfaceType.Smooth
end

-- ==================== ВЫШКА ====================
local vx, vz = 100, -100
local tower = Instance.new("Folder")
tower.Name = "Tower"
tower.Parent = map

for _, offset in pairs({{-8, -8}, {8, -8}, {-8, 8}, {8, 8}}) do
    wall("Leg", Vector3.new(2, 20, 2), Vector3.new(vx + offset[1], 10, vz + offset[2]), C.fence, tower)
end

part("Platform", Vector3.new(20, 1, 20), Vector3.new(vx, 20.5, vz), C.fence, tower)
part("Roof", Vector3.new(22, 1, 22), Vector3.new(vx, 25, vz), C.roof, tower)

for i = 1, 10 do
    local step = part("Ladder"..i, Vector3.new(3, 1, 1), Vector3.new(vx + 12, i * 2, vz), C.fence, tower)
    step.TopSurface = Enum.SurfaceType.Smooth
end

-- ==================== ДЕКОР ====================
for i = 1, 8 do
    local bx = math.random(-100, 100)
    local bz = math.random(-100, 100)
    part("Barrel"..i, Vector3.new(3, 4, 3), Vector3.new(bx, 2, bz), C.barrel, map)
end

for i = 1, 3 do
    local tx = math.random(-120, 120)
    local tz = math.random(-120, 120)
    part("Tent"..i, Vector3.new(10, 6, 10), Vector3.new(tx, 3, tz), C.tent, map)
end

part("Sign1", Vector3.new(4, 6, 1), Vector3.new(-50, 3, -50), C.warning, map)
part("Sign2", Vector3.new(4, 6, 1), Vector3.new(50, 3, 50), C.warning, map)

part("CarBody", Vector3.new(12, 4, 6), Vector3.new(-60, 2, 60), C.wall_grey, map)
part("CarWheel1", Vector3.new(2, 2, 2), Vector3.new(-65, 1, 57), C.fence, map)
part("CarWheel2", Vector3.new(2, 2, 2), Vector3.new(-55, 1, 63), C.fence, map)

-- ==================== ТОЧКИ NPC ====================
local panicPoints = {
    {name = "Reception", center = Vector3.new(-80, 0.5, -80)},
    {name = "Street1", center = Vector3.new(-50, 0.5, 0)},
    {name = "Street2", center = Vector3.new(50, 0.5, 0)},
    {name = "Street3", center = Vector3.new(0, 0.5, -50)},
    {name = "Street4", center = Vector3.new(0, 0.5, 50)},
    {name = "Street5", center = Vector3.new(-100, 0.5, 100)},
    {name = "Street6", center = Vector3.new(100, 0.5, -100)},
    {name = "Storage", center = Vector3.new(80, 0.5, 80)},
    {name = "Tower", center = Vector3.new(100, 0.5, -100)},
    {name = "Fence1", center = Vector3.new(-130, 0.5, 0)},
    {name = "Fence2", center = Vector3.new(130, 0.5, 0)}
}

for _, p in pairs(panicPoints) do
    local f = Instance.new("Folder")
    f.Name = p.name .. "_Points"
    f.Parent = npcs
    
    for i = 1, math.random(4, 5) do
        local point = Instance.new("Part")
        point.Name = "Point" .. i
        point.Size = Vector3.new(1, 1, 1)
        point.CFrame = CFrame.new(
            p.center.X + math.random(-20, 20),
            0.5,
            p.center.Z + math.random(-20, 20)
        )
        point.Transparency = 1
        point.CanCollide = false
        point.Anchored = true
        point.Parent = f
    end
end

-- ==================== СПАВНЫ ====================
local spawnData = {
    {"SpawnAlpha", Vector3.new(-120, 1, -120), Color3.fromRGB(75, 151, 75)},
    {"SpawnBravo", Vector3.new(-120, 1, 120), Color3.fromRGB(196, 40, 28)},
    {"SpawnCharlie", Vector3.new(120, 1, -120), Color3.fromRGB(13, 105, 172)},
    {"SpawnDelta", Vector3.new(120, 1, 120), Color3.fromRGB(245, 205, 48)}
}

for _, s in pairs(spawnData) do
    local sp = Instance.new("SpawnLocation")
    sp.Name = s[1]
    sp.Size = Vector3.new(6, 1, 6)
    sp.CFrame = CFrame.new(s[2])
    sp.Color = s[3]
    sp.Material = Enum.Material.Plastic
    sp.TopSurface = Enum.SurfaceType.Studs
    sp.BottomSurface = Enum.SurfaceType.Inlet
    sp.Parent = spawns
end

-- ==================== СВЕТ ====================
for _, pos in pairs({{-100, -100}, {100, 100}, {-100, 100}, {100, -100}, {0, 0}}) do
    local pole = wall("LampPole", Vector3.new(1, 12, 1), Vector3.new(pos[1], 6, pos[2]), C.fence, map)
    local lamp = part("Lamp", Vector3.new(3, 2, 3), Vector3.new(pos[1], 12.5, pos[2]), C.light, map)
    lamp.Material = Enum.Material.Neon
    
    local light = Instance.new("PointLight")
    light.Brightness = 5
    light.Range = 30
    light.Color = Color3.fromRGB(255, 255, 200)
    light.Parent = lamp
end

-- ==================== ПАРАЗИТ ====================
local gameLogic = workspace:FindFirstChild("GameLogic") or Instance.new("Folder")
gameLogic.Name = "GameLogic"
gameLogic.Parent = workspace

local parasite = Instance.new("Part")
parasite.Name = "Parasite"
parasite.Shape = Enum.PartType.Ball
parasite.Size = Vector3.new(2, 2, 2)
parasite.Position = Vector3.new(0, 50, 0)
parasite.Color = Color3.fromRGB(0, 0, 0)
parasite.Material = Enum.Material.Plastic
parasite.Transparency = 0.5
parasite.Anchored = true
parasite.Parent = gameLogic

local pLight = Instance.new("PointLight")
pLight.Color = Color3.fromRGB(255, 0, 0)
pLight.Brightness = 5
pLight.Range = 10
pLight.Parent = parasite

print("=== ЛАБОРАТОРИЯ ЧП [РЕТРО R6] ПОСТРОЕНА ===")
print("Сохрани проект: Ctrl+S")