WeldScript: Difference between revisions

From Legacy Roblox Wiki
Jump to navigationJump to search
>HotThoth
New page: <pre> local makeWeld = game.Lighting:FindFirstChild("MakeWeld") local selectFirst = game.Lighting:FindFirstChild("WeldSelectFirst") local selectSecond = game.Lighting:FindFirstChild("WeldS...
 
>Anaminus
redirecting instead
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
<pre>
#redirect [[User:HotThoth/WeldScript]]
local makeWeld = game.Lighting:FindFirstChild("MakeWeld")
local selectFirst = game.Lighting:FindFirstChild("WeldSelectFirst")
local selectSecond = game.Lighting:FindFirstChild("WeldSelectSecond")
local printC0 = game.Lighting:FindFirstChild("PrintC0")
local printC1 = game.Lighting:FindFirstChild("PrintC1")
local editWelds = game.Lighting:FindFirstChild("EditWelds")
local finalizeWelds = game.Lighting:FindFirstChild("FinalizeWelds")
local clearScript = game.Lighting:FindFirstChild("RemoveWeldScript")
 
if makeWeld == nil then
makeWeld = Instance.new("BoolValue")
makeWeld.Name = "MakeWeld"
makeWeld.Value = false
makeWeld.Parent = game.Lighting
end
 
if selectFirst == nil then
selectFirst = Instance.new("BoolValue")
selectFirst.Name = "WeldSelectFirst"
selectFirst.Value = false
selectFirst.Parent = game.Lighting
end
 
if selectSecond == nil then
selectSecond = Instance.new("BoolValue")
selectSecond.Name = "WeldSelectSecond"
selectSecond.Value = false
selectSecond.Parent = game.Lighting
end
 
 
if printC0 == nil then
printC0 = Instance.new("BoolValue")
printC0.Name = "PrintC0"
printC0.Value = false
printC0.Parent = game.Lighting
end
 
if printC1 == nil then
printC1 = Instance.new("BoolValue")
printC1.Name = "PrintC1"
printC1.Value = false
printC1.Parent = game.Lighting
end
 
if editWelds == nil then
editWelds = Instance.new("BoolValue")
editWelds.Name = "EditWelds"
editWelds.Value = false
editWelds.Parent = game.Lighting
end
 
if finalizeWelds == nil then
finalizeWelds = Instance.new("BoolValue")
finalizeWelds.Name = "FinalizeWelds"
finalizeWelds.Value = false
finalizeWelds.Parent = game.Lighting
end
 
if clearScript == nil then
clearScript = Instance.new("BoolValue")
clearScript.Name = "RemoveWeldScript"
clearScript.Value = false
clearScript.Parent = game.Lighting
end
 
 
function waitUntilOnePartSelected()
local failSauce = true
selection = game.Selection:Get()
while (failSauce) do
while (#selection ~= 1) do selection = game.Selection:Get() wait() end -- stall
 
if selection[1].className ~= "Part" and selection[1].className ~= "TrussPart" and selection[1].className ~= "WedgePart" then
print("Selected object is still not of type Part!  Try harder.")
game.Selection:Set({})
else failSauce = false end
end
return selection[1]
end
 
function checkIfOneWeldSelected()
selection = game.Selection:Get()
if #selection ~= 1 then
print("You must select only a single weld!")
return nil
end
if selection[1].className ~= "Weld" then
print("That is not a weld you have selected.")
return nil
end
 
return selection[1]
end
 
 
function onMakeWeld(property)
if makeWeld.Value == false then return
else makeWeld.Value = false end
 
selection = game.Selection:Get()
if #selection > 2 or #selection < 1 then
print("Only 2 parts may be selected!")
return
end
if selection[1].className ~= "Part" and selection[1].className ~= "TrussPart" and selection[1].className ~= "WedgePart" then
print("First thing selected is not of type Part!  Bad you!")
return
end
if selection[2].className ~= "Part" and selection[2].className ~= "TrussPart" and selection[2].className ~= "WedgePart" then
print("Second thing selected is not of type Part!  Dislike.")
return
end
 
-- if we get here, we know we have two parts selected...  time to bring out the spotwelders :D
newWeld = Instance.new("Weld")
newWeld.Part0 = selection[1]
newWeld.Part1 = selection[2]
newWeld.Name = selection[1].Name .. "#" .. selection[2].Name .. "#" .. "Weld"
newWeld.C1 = newWeld.Part1.CFrame:inverse() * newWeld.Part0.CFrame
 
print("Weld created...  where would you like to place it? [Select ONE part now]")
 
newWeldBase = waitUntilOnePartSelected()
 
newWeld.Parent = selection[1]
end
 
 
function onSelectFirst(property)
if selectFirst.Value == false then return
else selectFirst.Value = false end
 
currWeld = checkIfOneWeldSelected()
 
if currWeld == nil then return end
 
game.Selection:Set({currWeld.Part0})
end
 
function onSelectSecond(property)
if selectSecond.Value == false then return
else selectSecond.Value = false end
 
currWeld = checkIfOneWeldSelected()
 
if currWeld == nil then return end
 
game.Selection:Set({currWeld.Part1})
end
 
 
function onPrintC0(property)
if printC0.Value == false then return
else printC0.Value = false end
 
currWeld = checkIfOneWeldSelected()
 
if currWeld == nil then return end
 
print(currWeld.C0)
end
 
function onPrintC1(property)
if printC1.Value == false then return
else printC1.Value = false end
 
currWeld = checkIfOneWeldSelected()
 
if currWeld == nil then return end
 
print(currWeld.C1)
end
 
local weldsToPreserve = {}
local oldParents = {}
function onEditWelds(property)
if editWelds.Value == false then return
else editWelds.Value = false end
 
selected = game.Selection:Get()
-- make sure they're all welds
phailThis = false
for i = 1, #selected do
if selected[i].className ~= "Weld" then phailThis = true end
end
 
if phailThis then
print("One of the selected objects is not a weld; please select welds to preserve only")
return
end
 
weldsToPreserve = {}
oldParents = {}
for i = 1, #selected do
table.insert(weldsToPreserve, selected[i])
table.insert(oldParents, selected[i].Parent)
end
print("Welds will be preserved upon finalizeWelds call [unless editWelds is called again first].")
end
 
function onFinalizeWelds(property)
if finalizeWelds.Value == false then return
else finalizeWelds.Value = false end
 
for i = 1, #weldsToPreserve do
tempWeld = weldsToPreserve[i]
tempWeld.C1 = tempWeld.Part1.CFrame:inverse() * tempWeld.Part0.CFrame
tempWeld.Parent = oldParents[i]
end
 
print(#weldsToPreserve, " welds preserved")
end
 
 
function onClearScript(property)
if clearScript.Value == false then return
else clearScript.Value = false end
 
makeWeld:remove()
selectFirst:remove()
selectSecond:remove()
printC0:remove()
printC1:remove()
editWelds:remove()
finalizeWelds:remove()
clearScript:remove()
end
 
 
makeWeld.Changed:connect(onMakeWeld)
selectFirst.Changed:connect(onSelectFirst)
selectSecond.Changed:connect(onSelectSecond)
printC0.Changed:connect(onPrintC0)
printC1.Changed:connect(onPrintC1)
editWelds.Changed:connect(onEditWelds)
finalizeWelds.Changed:connect(onFinalizeWelds)
clearScript.Changed:connect(onClearScript)
 
</pre>

Latest revision as of 23:41, 17 January 2011