diff --git a/rpui/tools/utilhack.lua b/rpui/tools/utilhack.lua new file mode 100644 index 0000000..b0bf5b0 --- /dev/null +++ b/rpui/tools/utilhack.lua @@ -0,0 +1,269 @@ +--[[ + The following legacy code is created by blocco. + + It contains many comments for documentation purposes. + It is to be used for educational purposes. + + This code is from RBXPri (Blocco Edition). + This file is "tools\utilhack.lua". +--]] + +local UtilityHack = Instance.new("HopperBin"); +UtilityHack.Name = "UtilHack"; +UtilityHack.TextureId = "rbxasset://rpui//images//utilhack.png" +local Code = Instance.new("LocalScript"); +Code.Name = "lua"; +Code.Source = [===[local hovBox = Instance.new("SelectionBox"); +hovBox.Name = "UtilityHackBox"; +hovBox.Color = BrickColor.new("White"); +hovBox.Visible = false; +hovBox.Parent = script.Parent; + +local UtilityHackGui = Instance.new("ScreenGui", script.Parent); +UtilityHackGui.Name = "UtilityHackGui"; + +local selectedMode="Anchor Toggle"; + +local modes={ + ["Anchor Toggle"]=function(mouse) + local prt = mouse.Target; + prt.Anchored = not prt.Anchored; + end; + ["Random Color"]=function(mouse) + local prt = mouse.Target; + prt.BrickColor = BrickColor.Random(); + end; + ["Spawn Bomb"]=function(mouse) + local exploded=false; + local prt=Instance.new("Part"); + local eVal = Instance.new("BoolValue"); + eVal.Name = "ForceExplode"; + eVal.Parent = prt; + prt.Name = "Bomb"; + prt.BrickColor = BrickColor.new("Bright red"); + prt.Reflectance = 0.7; + prt.Size = Vector3.new(2, 2, 2); + prt.Shape = "Ball"; + prt.Locked=true; + prt.TopSurface = "Smooth"; + prt.BottomSurface = "Smooth"; + prt.CFrame = mouse.Hit + Vector3.new(0, 6, 0) + prt.Parent = workspace; + local explosion = Instance.new("Explosion") + explosion.BlastRadius = 10; + explosion.BlastPressure = 10e5; + local n=0; + for i = 2, 12 do n = n + 6/(i^2) end + game:service("Debris"):AddItem(prt, n+0.45) + for i = 2, 12 do + if eVal.Value then exploded = true; game:service("Debris"):AddItem(prt, 0) explosion.Position = prt.Position; explosion.Parent = workspace; break end; + prt.Reflectance = 1-prt.Reflectance; + wait(6/i^2); + end + explosion.Position = prt.Position; + explosion.Hit:connect(function(p) + if p:FindFirstChild("ForceExplode") and p.Name == "Bomb" then + p.ForceExplode.Value = true; + end + end) + if prt.Parent and not exploded then explosion.Parent = workspace; prt.CanCollide = false; prt.Transparency = 1 end + end; + --[==[["Spawn Mega Bomb"]=function(mouse) + local exploded=false; + local prt=Instance.new("Part"); + local eVal = Instance.new("BoolValue"); + eVal.Name = "ForceExplode"; + eVal.Parent = prt; + prt.Name = "Bomb"; + prt.BrickColor = BrickColor.new("Bright red"); + prt.Reflectance = 0.7; + prt.Size = Vector3.new(12, 12, 12); + prt.Shape = "Ball"; + prt.TopSurface = "Smooth"; + prt.BottomSurface = "Smooth"; + prt.CFrame = mouse.Hit + Vector3.new(0, 16, 0) + prt.Locked=true; + prt.Parent = workspace; + local explosion = Instance.new("Explosion") + explosion.BlastRadius = 150; + explosion.BlastPressure = 10e8; + for i = 2, 12 do + if eVal.Value then exploded = true; game:service("Debris"):AddItem(prt, 0) explosion.Position = prt.Position; explosion.Parent = workspace; break end; + prt.Reflectance = 1-prt.Reflectance; + wait(6/i^2); + end + game:service("Debris"):AddItem(prt, 0) + explosion.Position = prt.Position; + explosion.Hit:connect(function(p) + if p:FindFirstChild("ForceExplode") and p.Name == "Bomb" then + p.ForceExplode.Value = true; + end + end) + if prt.Parent and not exploded then explosion.Parent = workspace; end + end;]==]-- + ["Collide Toggle"]=function(mouse) + mouse.Target.CanCollide = not mouse.Target.CanCollide; + end; +} + +local function createDropDownUtility(list, sel, onsel) + + sel = sel or 1; + local width = 160; -- these can be changed to change the look of it + local height = 24; + local gapSize = 2; + + local utilityColor = Color3.new(0.85, 0.85, 0.85); + local utilityBorderColor = Color3.new(0, 0, 0); + local inputColor = Color3.new(1, 1, 1); + local fontColor = Color3.new(0, 0, 0); + + local btnColor = Color3.new(0.9, 0.9, 0.9); + local btnColorHov = Color3.new(0.95, 0.95, 0.95); + local btnColorDn = Color3.new(0.65, 0.65, 0.65); + + local btnColorSel = Color3.new(0.7, 0.7, 1); + local btnColorHovSel = Color3.new(0.75, 0.75, 1); + local btnColorDnSel = Color3.new(0.45, 0.45, 0.8); + + local function createButton(nam, sel) + local btn=Instance.new("TextButton"); + btn.AutoButtonColor = false; + btn.Name = nam; + btn.Font = sel and "ArialBold" or "Arial"; + btn.FontSize = "Size14"; + btn.TextColor3 = fontColor; + btn.BackgroundColor3 = sel and btnColorSel or btnColor; + btn.BorderColor3 = utilityBorderColor; + + btn.MouseEnter:connect(function() + btn.BackgroundColor3 = sel and btnColorHovSel or btnColorHov; + end) + btn.MouseLeave:connect(function() + btn.BackgroundColor3 = sel and btnColorSel or btnColor; + end) + btn.MouseButton1Down:connect(function() + btn.BackgroundColor3 = sel and btnColorDnSel or btnColorDn; + end) + btn.MouseButton1Up:connect(function() + btn.BackgroundColor3 = sel and btnColorSel or btnColor; + end) + return btn; + end + + local holder = Instance.new("Frame"); + holder.Name = "DropDownList"; + holder.Size = UDim2.new(0, width, 0, height); + holder.BackgroundColor3 = utilityColor; + holder.BorderColor3 = Color3.new(0, 0, 0); + + local frm=Instance.new("Frame"); + frm.Name = "LabelHolder"; + frm.Size = UDim2.new(1, -(gapSize*2), 0, height-(gapSize*2))--UDim2.new(0, width-(gapSize*3 + height-(gapSize*2)), 0, height-(gapSize*2)); + frm.Position = UDim2.new(0, gapSize, 0, gapSize); + frm.BackgroundColor3 = inputColor; -- cheating since this isn't an input + frm.BorderColor3 = utilityBorderColor; + frm.Parent = holder; + + local lbl = Instance.new("TextLabel"); + lbl.TextXAlignment = "Left"; + lbl.Name = "Label"; + lbl.Font = "ArialBold"; + lbl.FontSize = "Size14"; + lbl.Size = UDim2.new(1, -height, 1, -(gapSize*2)); + lbl.Position = UDim2.new(0, gapSize, 0, gapSize); + lbl.Text = list[sel] and sel or "Select an item"; + lbl.TextColor3 = fontColor; + lbl.BackgroundColor3 = inputColor; -- cheating since this isn't an input + lbl.BorderColor3 = utilityBorderColor; + lbl.BorderSizePixel = 0; + lbl.BackgroundTransparency = 1; + lbl.Parent = frm; + + local btn=Instance.new("ImageButton"); + btn.Name = "DropDownButton"; + btn.AutoButtonColor = false; + btn.Image = "rbxasset://rpui//images//dropdown_down.png" + btn.BorderSizePixel=0; + btn.BackgroundTransparency = 1; + btn.Size = UDim2.new(0, height-(gapSize*2), 0, height-(gapSize*2)); + btn.Position = UDim2.new(1, -height+gapSize, 0, 0); + btn.Parent = frm; + + local lstObj = Instance.new("Frame"); + lstObj.BackgroundColor3 = utilityColor; + lstObj.BorderColor3 = utilityBorderColor; + lstObj.Name = "ListObject"; + lstObj.Visible=false; + lstObj.Position = UDim2.new(0, 0, 0, height+gapSize); + lstObj.Parent = holder; + + updateList = function() + local objs=0; + for i, v in pairs(lstObj:GetChildren()) do + v.Parent = nil; + end + for i, v in pairs(list) do + objs=objs+1; + local objBtn=createButton("object_" .. i, sel == i); + objBtn.Size = UDim2.new(0, width-(gapSize*3 + height-(gapSize*2)), 0, height-(gapSize*2)); + objBtn.Position = UDim2.new(0, gapSize, 0, (height-gapSize)*(objs-1) + gapSize); + objBtn.Text = tostring(i); + objBtn.Parent = lstObj; + objBtn.MouseButton1Click:connect(function() + sel = i; + onsel(i); + lstObj.Visible=false; + btn.Image = "rbxasset://rpui//images//dropdown_down.png" + lbl.Text = tostring(i); + updateList(); + end) + end + lstObj.Size = UDim2.new(0, width-(gapSize + height-(gapSize*2)), 0, (height-gapSize)*objs + gapSize); + end + + btn.MouseButton1Click:connect(function() + lstObj.Visible = not lstObj.Visible; + btn.Image = lstObj.Visible and "rbxasset://rpui//images//dropdown_up.png" or "rbxasset://rpui//images//dropdown_down.png" + updateList(); + end) + + return holder; + +end + +local function onDropDownSelect(obj) + selectedMode = obj; +end + +local dropDownUtility = createDropDownUtility(modes, "Anchor Toggle", onDropDownSelect); +dropDownUtility.Position = UDim2.new(1, -164, 0, 100) +dropDownUtility.Parent = UtilityHackGui; + +script.Parent.Selected:connect(function(ms) + repeat wait() until game.Players.LocalPlayer:FindFirstChild("PlayerGui"); + UtilityHackGui.Parent = game.Players.LocalPlayer.PlayerGui; + hovBox.Parent = game.Players.LocalPlayer.PlayerGui; + hovBox.Visible = true; + hovBox.Adornee = nil; + ms.Move:connect(function() + if ms.Target and ms.Target:IsA("BasePart") and not ms.Target.Locked then + hovBox.Adornee = ms.Target; + else + hovBox.Adornee = nil; + end + end) + ms.Button1Down:connect(function() + if ms.Target and ms.Target:IsA("BasePart") and not ms.Target.Locked then coroutine.resume(coroutine.create(function() modes[selectedMode or "Anchor Toggle"](ms) end)); end + end) +end) + +script.Parent.Deselected:connect(function() + hovBox.Adornee = nil; + hovBox.Visible = false; + hovBox.Parent = script.Parent; + UtilityHackGui.Parent = script.Parent; +end)]===] +Code.Parent = UtilityHack; + +return UtilityHack;