UtilScript
local DefaultSearchName = "#SEARCH NAME HERE#" local cycleIndex = 0
local searchName = game.Lighting:FindFirstChild("SearchForName") if searchName == nil then searchName = Instance.new("StringValue") searchName.Name = "SearchForName" searchName.Value = DefaultSearchName searchName.Parent = game.Lighting end
local clearScript = game.Lighting:FindFirstChild("ClearUtils") if clearScript == nil then clearScript = Instance.new("BoolValue") clearScript.Name = "ClearUtils" clearScript.Value = false clearScript.Parent = game.Lighting end
local cycleSelected = game.Lighting:FindFirstChild("CycleThroughSelected") if cycleSelected == nil then cycleSelected = Instance.new("BoolValue") cycleSelected.Name = "CycleThroughSelected" cycleSelected.Value = false cycleSelected.Parent = game.Lighting end
local cycleSelectedR = game.Lighting:FindFirstChild("ReverseCycleThroughSelected") if cycleSelectedR == nil then cycleSelectedR = Instance.new("BoolValue") cycleSelectedR.Name = "ReverseCycleThroughSelected" cycleSelectedR.Value = false cycleSelectedR.Parent = game.Lighting end
local printCFrame = game.Lighting:FindFirstChild("PrintCFrame") if printCFrame == nil then printCFrame = Instance.new("BoolValue") printCFrame.Name = "PrintCFrame" printCFrame.Value = false printCFrame.Parent = game.Lighting end
function hasChildren(parentObject)
parentObject:GetChildren()
end
local debounceSearchName = false
local searchFinds = {}
function findName(searchSpace, name) if searchSpace == nil then return end if (searchSpace.Name == name) then pcall(table.insert, searchFinds, searchSpace) --table.insert(searchFinds, searchSpace) -- add to hits else -- stop our search depth-wise at first hit -- recursively search deeper through our search tree if (pcall(hasChildren, searchSpace)) then local searchChildren = searchSpace:GetChildren() --print(#searchChildren) for i = 1, #searchChildren do pcall(findName, searchChildren[i], name) end else end end return end
function onSearchName(property) if debounceSearchName or searchName.Value == DefaultSearchName then return -- cannot search for this string else debounceSearchName = true end print("Searching for " .. searchName.Value) local nameToSearchFor = searchName.Value searchName.Value = DefaultSearchName
local selection = game.Selection:Get() searchFinds = {}
-- default search space is the entire workspace if #selection == 0 then selection = game.Workspace:GetChildren() end
for i = 1, #selection do findName(selection[i], nameToSearchFor) end
game.Selection:Set(searchFinds)
print("Search finished!")
debounceSearchName = false end
function cycleStuff(increment) currSelect = game.Selection:Get() if #currSelect > 1 then -- anytime more than 1 is selected, becomes the new group to cycle through cycleIndex = 0 searchFinds = currSelect end
if #searchFinds == 0 then return end
cycleIndex = cycleIndex + increment
if cycleIndex > #searchFinds then cycleIndex = 1 elseif cycleIndex < 1 then cycleIndex = #searchFinds end
game.Selection:Set({searchFinds[cycleIndex]}) end
function outputCFrame(object)
print(object.CFrame)
end
function onCycleSelected(property)
if cycleSelected.Value == false then return
else cycleSelected.Value = false end
cycleStuff(1) end
function onCycleSelectedR(property) if cycleSelectedR.Value == false then return else cycleSelectedR.Value = false end
cycleStuff(-1) end
function onPrintCFrame(property) if printCFrame.Value == false then return else printCFrame.Value = false end
selection = game.Selection:Get() if #selection > 0 then print("20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)~~") end for i = 1, #selection do print(selection[i].Name .. " has CFrame: ") pcall(outputCFrame, selection[i]) print("20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)20:44, 17 January 2011 (UTC)~~") end end
function onClearScript(property)
if clearScript.Value == false then return
else clearScript.Value = false end
searchName:remove() cycleSelected:remove() cycleSelectedR:remove() printCFrame:remove() clearScript:remove() end
searchName.Changed:connect(onSearchName)
cycleSelected.Changed:connect(onCycleSelected)
cycleSelectedR.Changed:connect(onCycleSelectedR)
printCFrame.Changed:connect(onPrintCFrame)
clearScript.Changed:connect(onClearScript)