Initial commit

This commit is contained in:
2025-12-17 16:47:48 +00:00
commit 13813f3363
4964 changed files with 1079753 additions and 0 deletions

View File

@@ -0,0 +1,411 @@
while game == nil do
wait(1/30)
end
---------------
--PLUGIN SETUP-
---------------
local on = false
local loaded = false
self = PluginManager():CreatePlugin()
toolbar = self:CreateToolbar("Terrain")
toolbarbutton = toolbar:CreateButton("Stamper", "Part Stamper - Toggle List (Shift + F)", "stamp.png")
toolbarbutton.Click:connect(function()
if on then
Off()
elseif loaded then
On()
end
end)
game:WaitForChild("Workspace")
game.Workspace:WaitForChild("Terrain")
-----------------
--DEFAULT VALUES-
-----------------
local partButtonOn = true
local currStampGui = nil
local currStampId = nil
local recentsFrame = nil
local waterTypeChangedEvent = nil
local waterForceAndDirection = {"None","NegX"}
local setPanelVisibility = nil
local getPanelVisibility = nil
local stampControl = nil
local lastStampModel = nil
local keyCon = nil
-- ids of users we want to load sets in from
local userSetIds = {11744447,18881789,18881808,18881829,18881853,18881866}
local recentButtonStack = {}
-- mouse management
local mouse = nil
-- Libraries
local RbxStamper = nil
local RbxGui = nil
Spawn(function()
RbxGui = LoadLibrary("RbxGui")
RbxStamper = LoadLibrary("RbxStamper")
end)
local BaseUrl = game:GetService("ContentProvider").BaseUrl:lower()
-----------------------
--FUNCTION DEFINITIONS-
-----------------------
function getRbxGui()
if not RbxGui then
print("teh new rbxgui")
RbxGui = LoadLibrary("RbxGui")
end
return RbxGui
end
function getRbxStamper()
if not RbxStamper then
print("teh new stamper")
RbxStamper = LoadLibrary("RbxStamper")
end
return RbxStamper
end
function showLoadingDialog()
currStampGui.LoadingFrame.LoadingText:TweenPosition(UDim2.new(0,150,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 2, true)
currStampGui.LoadingFrame.Visible = true
end
function hideLoadingDialog()
currStampGui.LoadingFrame.LoadingText:TweenPosition(UDim2.new(0,0,0,0), Enum.EasingDirection.Out, Enum.EasingStyle.Quad, 0.1, true)
currStampGui.LoadingFrame.Visible = false
end
local partSelected = function(name, id, terrainShape)
if not id then
return
end
if not name then
return
end
currStampId = id
if stampControl then
stampControl.Destroy()
end
if stampCon then
stampCon:disconnect()
stampCon = nil
end
setPanelVisibility(false)
showLoadingDialog()
lastStampModel = getRbxStamper().GetStampModel(id, terrainShape)
updateRecentParts(name, id, terrainShape)
hideLoadingDialog()
if lastStampModel.Name == "MegaClusterCube" then
local clusterTag = lastStampModel:FindFirstChild("ClusterMaterial")
-- we are going to stamp water, send info to stamper about this
if clusterTag and clusterTag:isA("Vector3Value") and clusterTag.Value.X == 17 then
local waterForceTag = Instance.new("StringValue",lastStampModel)
waterForceTag.Name = "WaterForceTag"
waterForceTag.Value = waterForceAndDirection[1]
local waterForceDirectionTag = Instance.new("StringValue",lastStampModel)
waterForceDirectionTag.Name = "WaterForceDirectionTag"
waterForceDirectionTag.Value = waterForceAndDirection[2]
end
end
setupStamper(lastStampModel, mouse)
end
function updateWaterInfo()
if stampControl then
stampControl.Destroy()
end
if stampCon then
stampCon:disconnect()
stampCon = nil
end
showLoadingDialog()
lastStampModel = getRbxStamper().GetStampModel(currStampId)
hideLoadingDialog()
if lastStampModel.Name == "MegaClusterCube" then
local clusterTag = lastStampModel:FindFirstChild("ClusterMaterial")
-- we are going to stamp water, send info to stamper about this
if clusterTag and clusterTag.Value.X == 17 then
local waterForceTag = Instance.new("StringValue",lastStampModel)
waterForceTag.Name = "WaterForceTag"
waterForceTag.Value = waterForceAndDirection[1]
local waterForceDirectionTag = Instance.new("StringValue",lastStampModel)
waterForceDirectionTag.Name = "WaterForceDirectionTag"
waterForceDirectionTag.Value = waterForceAndDirection[2]
end
end
setupStamper(lastStampModel, mouse)
end
local dialogClosed = function()
if lastStampModel then
if stampControl then
stampControl.Destroy()
end
setupStamper(lastStampModel, mouse)
end
end
function pickPart()
if stampControl then
stampControl.Destroy()
end
setPanelVisibility(true)
end
function keyHandler(key)
if key == 'f' then
handlePartShow()
end
end
function partOn()
pickPart()
partButtonOn = true
end
function partOff()
setPanelVisibility(false)
if lastStampModel then
if stampControl then
stampControl.Destroy()
end
setupStamper(lastStampModel, mouse)
end
partButtonOn = false
end
function handlePartShow()
if getPanelVisibility() then
partOff()
else
partOn()
end
end
function On()
if not game.Workspace.Terrain then
return
end
if self then
self:Activate(true)
mouse = self:GetMouse()
end
if toolbarbutton then
toolbarbutton:SetActive(true)
end
if not currStampGui then -- first load, lets make the gui
createGui()
end
if setPanelVisibility then
setPanelVisibility(true)
end
if recentsFrame then
recentsFrame.Visible = true
end
if keyHandler then
keyCon = mouse.KeyDown:connect(keyHandler)
end
on = true
end
function Off()
if toolbarbutton then
toolbarbutton:SetActive(false)
end
if stampControl then
stampControl.Destroy()
end
if keyCon then
keyCon:disconnect()
keyCon = nil
end
if currStampGui and currStampGui:FindFirstChild("WaterFrame") then
currStampGui.WaterFrame.Visible = false
end
if lastStampModel then
lastStampModel:Destroy()
end
if setPanelVisibility then
setPanelVisibility(false)
end
if recentsFrame then
recentsFrame.Visible = false
end
on = false
end
------------------------------------------------------------------------------------------
-- Connect to deactivation event once the handler is defined
------------------------------------------------------------------------------------------
self.Deactivation:connect(function()
Off()
end)
function setupStamper(model, mouse)
if model then
stampControl = getRbxStamper().SetupStamperDragger(model,mouse)
if stampControl then
stampCon = stampControl.Stamped.Changed:connect(function()
if stampControl.Stamped.Value then
stampControl.ReloadModel()
end
end)
end
end
end
function updateRecentParts(newName, newId, newTerrainShape)
if newId then
for i = 1, #recentButtonStack do
if recentButtonStack[i].Id == newId then -- already have item, nothing to do
return
end
end
for i = #recentButtonStack - 1, 1, -1 do
recentButtonStack[i + 1].Id = recentButtonStack[i].Id
recentButtonStack[i + 1].Name = recentButtonStack[i].Name
recentButtonStack[i + 1].TerrainShape = recentButtonStack[i].TerrainShape
recentButtonStack[i + 1].Button.Image = recentButtonStack[i].Button.Image
end
recentButtonStack[1].Id = newId
recentButtonStack[1].Name = newName
recentButtonStack[1].TerrainShape = newTerrainShape
recentButtonStack[1].Button.Image = BaseUrl .. "Game/Tools/ThumbnailAsset.ashx?fmt=png&wd=75&ht=75&aid=" .. tostring(newId)
end
end
------
--GUI-
------
function createGui()
--Insert Panel
currStampGui, setPanelVisibility, getPanelVisibility, waterTypeChangedEvent =
getRbxGui().CreateSetPanel(userSetIds, partSelected, dialogClosed, UDim2.new(0.8, 0, 0.9, 0), UDim2.new(0.1,0,0.05,0), true)
setPanelVisibility(false)
currStampGui.Parent = game:GetService("CoreGui")
waterTypeChangedEvent.Event:connect(function(waterTable)
waterForceAndDirection = waterTable
updateWaterInfo()
end)
-- Loading Gui
local loadingFrame = Instance.new("Frame")
loadingFrame.Name = "LoadingFrame"
loadingFrame.Style = Enum.FrameStyle.RobloxRound
loadingFrame.Size = UDim2.new(0,350,0,60)
loadingFrame.Visible = false
loadingFrame.Position = UDim2.new(0.5,-175,0.5,-30)
local loadingText = Instance.new("TextLabel")
loadingText.Name = "LoadingText"
loadingText.BackgroundTransparency = 1
loadingText.Size = UDim2.new(0,155,1,0)
loadingText.Font = Enum.Font.ArialBold
loadingText.FontSize = Enum.FontSize.Size36
loadingText.Text = "Loading..."
loadingText.TextColor3 = Color3.new(1,1,1)
loadingText.TextStrokeTransparency = 0
loadingText.Parent = loadingFrame
loadingFrame.Parent = currStampGui
-- Recents Stack Gui
recentsFrame = Instance.new("Frame")
recentsFrame.BackgroundTransparency = 0.5
recentsFrame.Name = "RecentsFrame"
recentsFrame.BackgroundColor3 = Color3.new(0,0,0)
recentsFrame.Size = UDim2.new(0,50,0,150)
recentsFrame.Visible = false
recentsFrame.Parent = currStampGui
local recentButtonOne = Instance.new("ImageButton")
recentButtonOne.Style = Enum.ButtonStyle.RobloxButton
recentButtonOne.Name = "RecentButtonOne"
recentButtonOne.Size = UDim2.new(0,50,0,50)
recentButtonOne.Parent = recentsFrame
local recentButtonTwo = recentButtonOne:clone()
recentButtonTwo.Name = "RecentButtonTwo"
recentButtonTwo.Position = UDim2.new(0,0,0,50)
recentButtonTwo.Parent = recentsFrame
local recentButtonThree = recentButtonOne:clone()
recentButtonThree.Name = "RecentButtonThree"
recentButtonThree.Position = UDim2.new(0,0,0,100)
recentButtonThree.Parent = recentsFrame
for i = 1, 3 do
recentButtonStack[i] = {}
recentButtonStack[i].Name = nil
recentButtonStack[i].Id = nil
recentButtonStack[i].TerrainShape = nil
end
recentButtonStack[1].Button = recentButtonOne
recentButtonStack[2].Button = recentButtonTwo
recentButtonStack[3].Button = recentButtonThree
local buttonClicked = false
for i = 1, #recentButtonStack do
recentButtonStack[i].Button.MouseButton1Click:connect(function()
if buttonClicked then return end
buttonClicked = true
partSelected(recentButtonStack[i].Name, recentButtonStack[i].Id, recentButtonStack[i].TerrainShape)
buttonClicked = false
end)
end
end
--------------------------
--SUCCESSFUL LOAD MESSAGE-
--------------------------
loaded = true