|
|
|
|
| local ReplicatedStorage = game:GetService("ReplicatedStorage")
|
| local CollectionService = game:GetService("CollectionService")
|
|
|
| local GameConfig = require(ReplicatedStorage:WaitForChild("Shared"):WaitForChild("GameConfig"))
|
|
|
| local worldFolder = workspace:WaitForChild("WorldStructures")
|
|
|
|
|
| local function createMarketArea()
|
| local marketFolder = Instance.new("Folder")
|
| marketFolder.Name = "Market"
|
| marketFolder.Parent = worldFolder
|
|
|
|
|
| local floor = Instance.new("Part")
|
| floor.Name = "MarketFloor"
|
| floor.Size = GameConfig.MarketSize
|
| floor.Position = GameConfig.MarketPosition
|
| floor.Anchored = true
|
| floor.Material = Enum.Material.Cobblestone
|
| floor.BrickColor = BrickColor.new("Dark stone grey")
|
| floor.TopSurface = Enum.SurfaceType.Smooth
|
| floor.Parent = marketFolder
|
|
|
|
|
| local wallHeight = 10
|
| local wallThickness = 1
|
| local marketPos = GameConfig.MarketPosition
|
| local mSize = GameConfig.MarketSize
|
|
|
| local walls = {
|
| {name = "BackWall", pos = Vector3.new(marketPos.X, marketPos.Y + wallHeight/2, marketPos.Z - mSize.Z/2), size = Vector3.new(mSize.X, wallHeight, wallThickness)},
|
| {name = "LeftWall", pos = Vector3.new(marketPos.X - mSize.X/2, marketPos.Y + wallHeight/2, marketPos.Z), size = Vector3.new(wallThickness, wallHeight, mSize.Z)},
|
| {name = "RightWall", pos = Vector3.new(marketPos.X + mSize.X/2, marketPos.Y + wallHeight/2, marketPos.Z), size = Vector3.new(wallThickness, wallHeight, mSize.Z)},
|
| }
|
|
|
| for _, wallData in ipairs(walls) do
|
| local wall = Instance.new("Part")
|
| wall.Name = wallData.name
|
| wall.Size = wallData.size
|
| wall.Position = wallData.pos
|
| wall.Anchored = true
|
| wall.Material = Enum.Material.WoodPlanks
|
| wall.BrickColor = BrickColor.new("Burlap")
|
| wall.Parent = marketFolder
|
| end
|
|
|
|
|
| local roof = Instance.new("Part")
|
| roof.Name = "MarketRoof"
|
| roof.Size = Vector3.new(mSize.X + 4, 1, mSize.Z + 4)
|
| roof.Position = Vector3.new(marketPos.X, marketPos.Y + wallHeight, marketPos.Z)
|
| roof.Anchored = true
|
| roof.Material = Enum.Material.WoodPlanks
|
| roof.BrickColor = BrickColor.new("Reddish brown")
|
| roof.Parent = marketFolder
|
|
|
|
|
| local dropoff = Instance.new("Part")
|
| dropoff.Name = "MarketDropoffZone"
|
| dropoff.Size = Vector3.new(15, 3, 15)
|
| dropoff.Position = GameConfig.MarketPosition + Vector3.new(0, 2, 10)
|
| dropoff.Anchored = true
|
| dropoff.CanCollide = false
|
| dropoff.Transparency = 0.7
|
| dropoff.BrickColor = BrickColor.new("Bright green")
|
| dropoff.Material = Enum.Material.ForceField
|
| CollectionService:AddTag(dropoff, "MarketDropoff")
|
| dropoff.Parent = marketFolder
|
|
|
|
|
| local signPart = Instance.new("Part")
|
| signPart.Name = "MarketSign"
|
| signPart.Size = Vector3.new(12, 3, 0.5)
|
| signPart.Position = Vector3.new(marketPos.X, marketPos.Y + wallHeight + 2.5, marketPos.Z + mSize.Z/2)
|
| signPart.Anchored = true
|
| signPart.Material = Enum.Material.Wood
|
| signPart.BrickColor = BrickColor.new("Dark orange")
|
| signPart.Parent = marketFolder
|
|
|
| local signGui = Instance.new("SurfaceGui")
|
| signGui.Face = Enum.NormalId.Front
|
| signGui.Parent = signPart
|
|
|
| local signLabel = Instance.new("TextLabel")
|
| signLabel.Size = UDim2.new(1, 0, 1, 0)
|
| signLabel.BackgroundTransparency = 1
|
| signLabel.Text = "LUMBER MARKET"
|
| signLabel.TextColor3 = Color3.new(1, 1, 1)
|
| signLabel.TextScaled = true
|
| signLabel.Font = Enum.Font.GothamBold
|
| signLabel.Parent = signGui
|
|
|
| print("Market area created")
|
| end
|
|
|
|
|
| local function createShopArea()
|
| local shopFolder = Instance.new("Folder")
|
| shopFolder.Name = "Shop"
|
| shopFolder.Parent = worldFolder
|
|
|
| local shopPos = GameConfig.ShopPosition
|
| local sSize = GameConfig.ShopSize
|
|
|
|
|
| local floor = Instance.new("Part")
|
| floor.Name = "ShopFloor"
|
| floor.Size = sSize
|
| floor.Position = shopPos
|
| floor.Anchored = true
|
| floor.Material = Enum.Material.WoodPlanks
|
| floor.BrickColor = BrickColor.new("Burlap")
|
| floor.TopSurface = Enum.SurfaceType.Smooth
|
| floor.Parent = shopFolder
|
|
|
|
|
| local wallHeight = 12
|
| local wallThickness = 1
|
|
|
| local walls = {
|
| {name = "BackWall", pos = Vector3.new(shopPos.X, shopPos.Y + wallHeight/2, shopPos.Z - sSize.Z/2), size = Vector3.new(sSize.X, wallHeight, wallThickness)},
|
| {name = "LeftWall", pos = Vector3.new(shopPos.X - sSize.X/2, shopPos.Y + wallHeight/2, shopPos.Z), size = Vector3.new(wallThickness, wallHeight, sSize.Z)},
|
| {name = "RightWall", pos = Vector3.new(shopPos.X + sSize.X/2, shopPos.Y + wallHeight/2, shopPos.Z), size = Vector3.new(wallThickness, wallHeight, sSize.Z)},
|
| }
|
|
|
| for _, wallData in ipairs(walls) do
|
| local wall = Instance.new("Part")
|
| wall.Name = wallData.name
|
| wall.Size = wallData.size
|
| wall.Position = wallData.pos
|
| wall.Anchored = true
|
| wall.Material = Enum.Material.Brick
|
| wall.BrickColor = BrickColor.new("Reddish brown")
|
| wall.Parent = shopFolder
|
| end
|
|
|
|
|
| local roof = Instance.new("Part")
|
| roof.Name = "ShopRoof"
|
| roof.Size = Vector3.new(sSize.X + 4, 1, sSize.Z + 4)
|
| roof.Position = Vector3.new(shopPos.X, shopPos.Y + wallHeight, shopPos.Z)
|
| roof.Anchored = true
|
| roof.Material = Enum.Material.Slate
|
| roof.BrickColor = BrickColor.new("Dark stone grey")
|
| roof.Parent = shopFolder
|
|
|
|
|
| local counter = Instance.new("Part")
|
| counter.Name = "ShopCounter"
|
| counter.Size = Vector3.new(10, 3, 3)
|
| counter.Position = shopPos + Vector3.new(0, 1.5, -5)
|
| counter.Anchored = true
|
| counter.Material = Enum.Material.WoodPlanks
|
| counter.BrickColor = BrickColor.new("Pine Cone")
|
| CollectionService:AddTag(counter, "ShopCounter")
|
| counter.Parent = shopFolder
|
|
|
|
|
| local signPart = Instance.new("Part")
|
| signPart.Name = "ShopSign"
|
| signPart.Size = Vector3.new(10, 3, 0.5)
|
| signPart.Position = Vector3.new(shopPos.X, shopPos.Y + wallHeight + 2.5, shopPos.Z + sSize.Z/2)
|
| signPart.Anchored = true
|
| signPart.Material = Enum.Material.Wood
|
| signPart.BrickColor = BrickColor.new("Bright blue")
|
| signPart.Parent = shopFolder
|
|
|
| local signGui = Instance.new("SurfaceGui")
|
| signGui.Face = Enum.NormalId.Front
|
| signGui.Parent = signPart
|
|
|
| local signLabel = Instance.new("TextLabel")
|
| signLabel.Size = UDim2.new(1, 0, 1, 0)
|
| signLabel.BackgroundTransparency = 1
|
| signLabel.Text = "SUE'S SUPPLY SHOP"
|
| signLabel.TextColor3 = Color3.new(1, 1, 1)
|
| signLabel.TextScaled = true
|
| signLabel.Font = Enum.Font.GothamBold
|
| signLabel.Parent = signGui
|
|
|
| print("Shop area created")
|
| end
|
|
|
|
|
| local function createRoads()
|
| local roadFolder = Instance.new("Folder")
|
| roadFolder.Name = "Roads"
|
| roadFolder.Parent = worldFolder
|
|
|
|
|
| local roads = {
|
| {from = GameConfig.SpawnPosition, to = GameConfig.MarketPosition, width = 8},
|
| {from = GameConfig.MarketPosition, to = GameConfig.ShopPosition, width = 6},
|
| }
|
|
|
| for i, roadData in ipairs(roads) do
|
| local midpoint = (roadData.from + roadData.to) / 2
|
| local direction = (roadData.to - roadData.from)
|
| local length = direction.Magnitude
|
|
|
| local roadPart = Instance.new("Part")
|
| roadPart.Name = "Road_" .. i
|
| roadPart.Size = Vector3.new(roadData.width, 0.3, length)
|
| roadPart.CFrame = CFrame.lookAt(midpoint, roadData.to) + Vector3.new(0, 0.2, 0)
|
| roadPart.Anchored = true
|
| roadPart.Material = Enum.Material.Cobblestone
|
| roadPart.Color = Color3.fromRGB(120, 110, 100)
|
| roadPart.TopSurface = Enum.SurfaceType.Smooth
|
| roadPart.Parent = roadFolder
|
| end
|
|
|
| print("Roads created")
|
| end
|
|
|
|
|
| task.spawn(function()
|
| task.wait(1)
|
|
|
| createMarketArea()
|
| createShopArea()
|
| createRoads()
|
|
|
| print("=== Map Structures Complete ===")
|
| end)
|
|
|