Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How do I use a SelectionBox in my tool?

Asked by 6 years ago
Edited 6 years ago

I'm trying to make a pickaxe, It wont work, The SelectionBox isn't even active for some reason. I need my pickaxe to highlight over the blocks/ores. I have the script but it won't work. Please, someone help, this is urgent!


repeat wait() until script.Parent:FindFirstChild("Stats") local Stats = require(script.Parent.Stats) local diddy = true local Mouse local Equipped = false local MobileMode = false local Active = false script.Parent.IsMining.Changed:connect(function() workspace.CurrentCamera.SelectedItem.Mining.Value = script.Parent.IsMining.Value end) workspace.CurrentCamera.SelectedItem.Mining.Value = script.Parent.IsMining.Value local function Activate() if not Active then script.Parent.Activation:FireServer(true) -- workspace.CurrentCamera.SelectedItem.Mining.Value = true Active = true while Active do if workspace.CurrentCamera.SelectedItem.Value ~= nil then -- workspace.CurrentCamera.SelectedItem.Mining.Value = true else break end wait(0.1) end -- workspace.CurrentCamera.SelectedItem.Mining.Value = false end end local function Deactivate() script.Parent.Activation:FireServer(false) -- workspace.CurrentCamera.SelectedItem.Mining.Value = false Active = false end local Selected = false local function SelectOre(Ore) if Ore.Parent == workspace.Mine and (Ore.Position - script.Parent.Parent.Torso.Position).Magnitude <= (Stats.Range * 6) then workspace.CurrentCamera.SelectedItem.Value = Ore script.Parent.SetTarget:InvokeServer(Ore) Selected = true elseif Ore and Ore.Parent:FindFirstChild("PlacedItem") then workspace.CurrentCamera.SelectedItem.Value = Ore.Parent script.Parent.SetTarget:InvokeServer(Ore.Parent) Selected = true else workspace.CurrentCamera.SelectedItem.Value = nil script.Parent.SetTarget:InvokeServer(nil) Selected = false end end local function Unselect() workspace.CurrentCamera.SelectedItem.Value = nil script.Parent.SetTarget:InvokeServer(nil) Selected = false end local function GetOreFromScreen(X,Y) local OldRay = workspace.CurrentCamera:ViewportPointToRay(X,Y) local DaRay = Ray.new(OldRay.Origin,OldRay.Direction*100) local Ore = workspace:FindPartOnRayWithIgnoreList(DaRay,workspace.Players:GetChildren()) return Ore end game:GetService("UserInputService").TouchTap:connect(function(posArray, Processed) if Equipped and #posArray == 1 --[[and not Processed ]] then MobileMode = true local Position = posArray[1] local Ore = GetOreFromScreen(Position.X,Position.Y) if Ore ~= nil then SelectOre(Ore) else Unselect() end end end) local TouchPosition local function CheckFrame() if Active and MobileMode then local Ore = GetOreFromScreen(TouchPosition.X,TouchPosition.Y) SelectOre(Ore) end local CurOre = workspace.CurrentCamera.SelectedItem.Value if Selected and (CurOre.Parent == nil or CurOre == nil) then Unselect() end end local CamPro = Enum.RenderPriority.Camera.Value if game:GetService("UserInputService").TouchEnabled then game:GetService("RunService"):BindToRenderStep("FrameCheck",CamPro+1,CheckFrame) end game:GetService("UserInputService").TouchLongPress:connect(function(posArray, State, Processed) if State == Enum.UserInputState.End or State == Enum.UserInputState.Cancel or not Equipped then Deactivate() elseif #posArray == 1 and State == Enum.UserInputState.Begin --[[and not Processed ]]then TouchPosition = posArray[1] MobileMode = true local Ore = GetOreFromScreen(TouchPosition.X,TouchPosition.Y) if Ore ~= nil then SelectOre(Ore) Activate() else Unselect() Deactivate() end elseif State == Enum.UserInputState.Change and Active then TouchPosition = posArray[1] end end) local Mouse = game.Players.LocalPlayer:GetMouse() Mouse.Button1Down:connect(function() if Equipped and (game:GetService("UserInputService").MouseEnabled or game:GetService("UserInputService").GamepadEnabled) then MobileMode = false Activate() end end) Mouse.Button1Up:connect(function() if Equipped and (game:GetService("UserInputService").MouseEnabled or game:GetService("UserInputService").GamepadEnabled) then MobileMode = false Deactivate() end end) script.Parent.Unequipped:connect(function() Equipped = false Mouse.TargetFilter = nil Deactivate() Unselect() end) script.Parent.Equipped:connect(function(Mousee) Equipped = true Mouse = Mousee Mouse = game.Players.LocalPlayer:GetMouse() if diddy then diddy = false game.Players.LocalPlayer.Character.ChildAdded:connect(function(Child) if Child.Name == "Platform" then Child.CanCollide = true end end) end Mouse.TargetFilter = workspace.Players while script.Parent.Enabled and script.Parent.Parent:FindFirstChild("Humanoid") do local Ore if not workspace.CurrentCamera.Full.Value then if game:GetService("UserInputService").GamepadEnabled then local OldRay if game:GetService("UserInputService").MouseBehavior == Enum.MouseBehavior.LockCenter then OldRay = workspace.CurrentCamera:ViewportPointToRay(workspace.CurrentCamera.ViewportSize.X/2,workspace.CurrentCamera.ViewportSize.Y/2) else OldRay = workspace.CurrentCamera:ViewportPointToRay(workspace.CurrentCamera.ViewportSize.X/2,workspace.CurrentCamera.ViewportSize.Y/2.8) end local DaRay = Ray.new(OldRay.Origin,OldRay.Direction*100) Ore = workspace:FindPartOnRayWithIgnoreList(DaRay,workspace.Players:GetChildren()) elseif game:GetService("UserInputService").MouseEnabled then Ore = Mouse.Target end if Ore then SelectOre(Ore) elseif not MobileMode then workspace.CurrentCamera.SelectedItem.Value = nil -- script.Parent.Target.Value = nil script.Parent.SetTarget:InvokeServer(nil) end elseif not MobileMode then workspace.CurrentCamera.SelectedItem.Value = nil script.Parent.SetTarget:InvokeServer(nil) end wait() end workspace.CurrentCamera.SelectedItem.Value = nil -- script.Parent.Target.Value = nil script.Parent.SetTarget:InvokeServer(nil) end)

Answer this question