forked from aya/aya
412 lines
9.7 KiB
Lua
412 lines
9.7 KiB
Lua
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
|