TimberWoods / src /ServerScriptService /MapManager.server.lua
algorembrant's picture
Upload 88 files
0712d5f verified
-- src/ServerScriptService/MapManager.server.lua
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local CollectionService = game:GetService("CollectionService")
local GameConfig = require(ReplicatedStorage:WaitForChild("Shared"):WaitForChild("GameConfig"))
local worldFolder = workspace:WaitForChild("WorldStructures")
-- Create market area
local function createMarketArea()
local marketFolder = Instance.new("Folder")
marketFolder.Name = "Market"
marketFolder.Parent = worldFolder
-- Market building floor
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
-- Market walls (3 walls, open front)
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
-- Roof
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
-- Market dropoff zone
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
-- Market sign
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
-- Create shop area
local function createShopArea()
local shopFolder = Instance.new("Folder")
shopFolder.Name = "Shop"
shopFolder.Parent = worldFolder
local shopPos = GameConfig.ShopPosition
local sSize = GameConfig.ShopSize
-- Shop floor
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
-- Shop walls
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
-- Roof
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
-- Shop counter
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
-- Shop sign
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
-- Create roads connecting major areas
local function createRoads()
local roadFolder = Instance.new("Folder")
roadFolder.Name = "Roads"
roadFolder.Parent = worldFolder
-- Main road from spawn toward market
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
-- Wait for world folder to be ready then build structures
task.spawn(function()
task.wait(1) -- Brief delay to ensure BiomeGeneratorManager creates the folder
createMarketArea()
createShopArea()
createRoads()
print("=== Map Structures Complete ===")
end)