443 lines
9.5 KiB
Plaintext
443 lines
9.5 KiB
Plaintext
while game == nil do
|
|
wait(1 / 30)
|
|
end
|
|
|
|
---------------
|
|
--PLUGIN SETUP-
|
|
---------------
|
|
local loaded = false
|
|
local on = false
|
|
|
|
local On, Off
|
|
|
|
local this = PluginManager():CreatePlugin()
|
|
this.Deactivation:connect(function()
|
|
Off()
|
|
end)
|
|
|
|
local toolbar = this:CreateToolbar "Terrain"
|
|
local 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 currStampGui
|
|
local currStampId
|
|
local recentsFrame
|
|
local waterTypeChangedEvent
|
|
local waterForceAndDirection = { "None", "NegX" }
|
|
|
|
local setPanelVisibility
|
|
local getPanelVisibility
|
|
|
|
local stampControl
|
|
local lastStampModel
|
|
|
|
local keyCon
|
|
|
|
-- ids of users we want to load sets in from
|
|
local userSetIds =
|
|
{ 11744447, 18881789, 18881808, 18881829, 18881853, 18881866 }
|
|
local recentButtonStack = {}
|
|
|
|
-- mouse management
|
|
local mouse
|
|
|
|
-- Libraries
|
|
local RbxStamper
|
|
local RbxGui
|
|
|
|
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()
|
|
end
|
|
|
|
function partOff()
|
|
setPanelVisibility(false)
|
|
if lastStampModel then
|
|
if stampControl then
|
|
stampControl.Destroy()
|
|
end
|
|
setupStamper(lastStampModel, mouse)
|
|
end
|
|
end
|
|
|
|
function handlePartShow()
|
|
if getPanelVisibility() then
|
|
partOff()
|
|
else
|
|
partOn()
|
|
end
|
|
end
|
|
|
|
On = function()
|
|
if not game.Workspace.Terrain then
|
|
return
|
|
end
|
|
|
|
if this then
|
|
this:Activate(true)
|
|
mouse = this: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
|
|
|
|
Off = function()
|
|
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
|
|
|
|
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
|