-
Notifications
You must be signed in to change notification settings - Fork 0
/
PlacementServer.server.lua
57 lines (44 loc) · 1.93 KB
/
PlacementServer.server.lua
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
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Remotes = ReplicatedStorage:WaitForChild("Remotes")
local Modules = ReplicatedStorage:WaitForChild("Modules")
local PlotService = require(Modules.PlotService)
local DataService = require(Modules.DataService)
local CustomEnums = require(Modules.CustomEnums)
local Items = ReplicatedStorage:WaitForChild("Items")
local function findItem(itemName)
for _, item in pairs(Items:GetDescendants()) do
if item.Name == itemName then
return item
end
end
return nil
end
local function isInsidePart(position, part)
local vector3 = part.CFrame:PointToObjectSpace(position)
return (math.abs(vector3.X) <= part.Size.X / 2)
and (math.abs(vector3.Y) <= part.Size.Y / 2)
and (math.abs(vector3.Z) <= part.Size.Z / 2)
end
Remotes.BuildingSystem.PlaceObject.OnServerInvoke = function(player, object, location)
local item = findItem(object)
local plot = PlotService.GetPlot(player)
local data = DataService.GetProfile(player)
local clonedItem
if item and plot ~= nil then
if data.Data.money < item.Settings.Price.Value then return CustomEnums.BuildSystem.InsufficientMoney end
if not isInsidePart(location.Position, plot.PlotCanvas) then return CustomEnums.BuildSystem.OutsideCanvas end
clonedItem = item:Clone()
clonedItem:SetPrimaryPartCFrame(location)
clonedItem.PrimaryPart.Position += Vector3.new(0, 0.001, 0)
clonedItem.PrimaryPart.CanCollide = true
clonedItem.PrimaryPart.Transparency = 0
data.Data.money -= item.Settings.Price.Value
Remotes.LocalEvents.MoneyChange:FireClient(player, data.Data.money, data.Data.roMoney)
clonedItem.Parent = plot.PlacedItems
local plotID = player:GetAttribute("LoadedPlot")
local itemData = DataService.SaveItem(player, clonedItem, plot, plotID)
clonedItem:SetAttribute("ID", itemData.ID)
return CustomEnums.BuildSystem.Success
end
return CustomEnums.BuildSystem.Error
end