File size: 2,553 Bytes
0712d5f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | -- src/ServerScriptService/PlotManager.server.lua
local CollectionService = game:GetService("CollectionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Players = game:GetService("Players")
local PlotConfig = require(ReplicatedStorage:WaitForChild("Shared"):WaitForChild("PlotConfig"))
local ClaimPlotEvent = ReplicatedStorage:WaitForChild("Events"):WaitForChild("ClaimPlot")
-- Keeps track of which player owns which plot
local activePlots = {} -- [player.UserId] = plotPart
local function claimPlot(player, targetPlot)
-- Validate requested plot
if not targetPlot or not targetPlot:IsA("BasePart") then return end
if not CollectionService:HasTag(targetPlot, "EmptyPlot") then return end
-- Ensure player doesn't already own a plot
if activePlots[player.UserId] then
print(player.Name .. " already owns a plot.")
return
end
-- Ensure plot isn't already claimed
for _, ownedPlot in pairs(activePlots) do
if ownedPlot == targetPlot then
print("Plot already claimed.")
return
end
end
-- Grant Ownership
activePlots[player.UserId] = targetPlot
-- Change Plot Visuals
targetPlot.BrickColor = BrickColor.new("Bright green")
CollectionService:RemoveTag(targetPlot, "EmptyPlot")
CollectionService:AddTag(targetPlot, "ClaimedPlot")
targetPlot:SetAttribute("OwnerId", player.UserId)
print(player.Name .. " successfully claimed a plot.")
-- Load their Datastore Data onto this plot (Deferred to DatastoreManager)
_G.LoadPlayerData(player, targetPlot)
end
-- Handle Claim Event
ClaimPlotEvent.OnServerEvent:Connect(claimPlot)
-- Cleanup when player leaves
Players.PlayerRemoving:Connect(function(player)
local plot = activePlots[player.UserId]
if plot then
-- Save their data (Deferred to DatastoreManager)
_G.SavePlayerData(player, plot)
-- Reset Plot
plot.BrickColor = BrickColor.new("Dark stone grey")
CollectionService:RemoveTag(plot, "ClaimedPlot")
CollectionService:AddTag(plot, "EmptyPlot")
plot:SetAttribute("OwnerId", nil)
-- Delete all objects on the plot
for _, obj in pairs(plot:GetChildren()) do
if obj:IsA("Model") or obj:IsA("BasePart") then
obj:Destroy()
end
end
activePlots[player.UserId] = nil
end
end)
|