Files
watrbx-game-engine/content/scripts/CoreScripts/BuildToolsScripts/BuildToolManager.lua
T
2025-09-18 17:55:52 -04:00

175 lines
4.5 KiB
Lua

-- Responsible for giving out tools in personal servers
-- first, lets see if buildTools have already been created
-- create the object in ReplicatedStorage if not
local container = Game:GetService("ReplicatedStorage")
local toolsArray = container:FindFirstChild("BuildToolsModel")
local ownerArray = container:FindFirstChild("OwnerToolsModel")
local hasBuildTools = false
local function waitForProperty(instance, name)
while not instance[name] do
instance.Changed:wait()
end
end
waitForProperty(Game:GetService("Players"),"LocalPlayer")
waitForProperty(Game:GetService("Players").LocalPlayer,"userId")
local player = Game:GetService("Players").LocalPlayer
if not player then
script:Destroy()
return
end
function getIds(idTable, assetTable)
for i = 1, #idTable do
local model = Game:GetService("InsertService"):LoadAsset(idTable[i])
if model then
local children = model:GetChildren()
for i = 1, #children do
if children[i]:IsA("Tool") then
table.insert(assetTable,children[i])
end
end
end
end
end
function storeInContainer(modelName, assetTable)
local model = Instance.new("Model")
model.Archivable = false
model.Name = modelName
for i = 1, #assetTable do
assetTable[i].Parent = model
end
if not container:FindFirstChild(modelName) then -- no one beat us to it, we get to insert
model.Parent = container
end
end
if not toolsArray then -- no one has made build tools yet, we get to!
local buildToolIds = {}
local ownerToolIds = {}
local BaseUrl = game:GetService("ContentProvider").BaseUrl:lower()
if BaseUrl:find("www.watrbx.wtf") or BaseUrl:find("gametest1") then
table.insert(buildToolIds,73089166) -- PartSelectionTool
table.insert(buildToolIds,73089190) -- DeleteTool
table.insert(buildToolIds,73089204) -- CloneTool
table.insert(buildToolIds,73089214) -- RotateTool
table.insert(buildToolIds,73089229) -- RecentPartTool
table.insert(buildToolIds,73089239) -- ConfigTool
table.insert(buildToolIds,73089259) -- WiringTool
elseif BaseUrl:find("gametest2") then
table.insert(buildToolIds,70353315) -- PartSelectionTool
table.insert(buildToolIds,70353317) -- DeleteTool
table.insert(buildToolIds,70353314) -- CloneTool
table.insert(buildToolIds,70353318) -- RotateTool
table.insert(buildToolIds,70353316) -- RecentPartTool
table.insert(buildToolIds,70353319) -- ConfigTool
table.insert(buildToolIds,70353320) -- WiringTool
end
table.insert(buildToolIds,58921588) -- ClassicTool
table.insert(ownerToolIds, 65347268) -- OwnerCameraTool
-- next, create array of our tools
local buildTools = {}
local ownerTools = {}
getIds(buildToolIds, buildTools)
getIds(ownerToolIds, ownerTools)
storeInContainer("BuildToolsModel",buildTools)
storeInContainer("OwnerToolsModel",ownerTools)
toolsArray = container:FindFirstChild("BuildToolsModel")
ownerArray = container:FindFirstChild("OwnerToolsModel")
end
local localBuildTools = {}
function giveBuildTools()
if not hasBuildTools then
hasBuildTools = true
local theTools = toolsArray:GetChildren()
for i = 1, #theTools do
local toolClone = theTools[i]:clone()
if toolClone then
toolClone.Parent = player:findFirstChild("Backpack")
table.insert(localBuildTools,toolClone)
end
end
end
end
function giveOwnerTools()
local theOwnerTools = ownerArray:GetChildren()
for i = 1, #theOwnerTools do
local ownerToolClone = theOwnerTools[i]:clone()
if ownerToolClone then
ownerToolClone.Parent = player:findFirstChild("Backpack")
table.insert(localBuildTools,ownerToolClone)
end
end
end
function removeBuildTools()
if not hasBuildTools then return end
hasBuildTools = false
for k,v in pairs(localBuildTools) do
v:Destroy()
end localBuildTools = {}
end
if player.HasBuildTools then
giveBuildTools()
end
if player.PersonalServerRank >= 255 then
giveOwnerTools()
end
local debounce = false
player.Changed:connect(function(prop)
if prop == "HasBuildTools" then
while debounce do
wait(0.5)
end
debounce = true
if player.HasBuildTools then
giveBuildTools()
else
removeBuildTools()
end
if player.PersonalServerRank >= 255 then
giveOwnerTools()
end
debounce = false
elseif prop == "PersonalServerRank" then
if player.PersonalServerRank >= 255 then
giveOwnerTools()
elseif player.PersonalServerRank <= 0 then
player:Kick() -- you're banned, goodbye!
Game:SetMessage("You're banned from this PBS")
end
end
end)
player.CharacterAdded:connect(function()
hasBuildTools = false
if player.HasBuildTools then
giveBuildTools()
end
if player.PersonalServerRank >= 255 then
giveOwnerTools()
end
end)