Hey, I was wondering if someone could explain, function grab between line 85 and 128.
especially if (obj:IsA"Part") or (obj:IsA"Seat") or (obj:IsA"SpawnLocation") then if (brickDistance(obj, pos) < grValue.Value) and (not obj.Anchored) and (h == nil) then
and
elseif (obj:IsA"Workspace" or obj:IsA"Model" or obj:IsA"Tool" or obj:IsA"Hat") and (obj ~= Player.Character) then
Full script is below, so yeah lines between 85 and 128
Please help, I would like to know how this script work.
TelekinesisRadius = 12
GrabRadius = 14
ReloadTime = .5
MaxForce = 1100400
function waitForChild(parent, childName)
local child = parent:FindFirstChild(childName)
if child then return child end
while true do
child = parent.ChildAdded:wait()
if child.Name==childName then return child end
end
end
Hopperbin = script.Parent
Player = game.Players.LocalPlayer
BrickScript = waitForChild(Hopperbin, "BrickScript")
local debounce = false
local TKCF = nil
local grValue = Instance.new("NumberValue")
grValue.Value = GrabRadius
grValue.Name = "Grab Radius"
grValue.Archivable = false
grValue.Parent = Hopperbin
local tkrValue = Instance.new("NumberValue")
tkrValue.Value = TelekinesisRadius
tkrValue.Name = "Telekinesis Radius"
tkrValue.Archivable = false
tkrValue.Parent = Hopperbin
local rldValue = Instance.new("NumberValue")
rldValue.Value = ReloadTime
rldValue.Name = "Reload Time"
rldValue.Archivable = false
rldValue.Parent = Hopperbin
local maxFValue = Instance.new("NumberValue")
maxFValue.Value = MaxForce
maxFValue.Name = "Max Force"
maxFValue.Archivable = false
maxFValue.Parent = Hopperbin
--TKRadius = 32
TKPos = Vector3.new(0, 0, 0)
local totalMass = 0
function brickDistance(obj, pos)
if (obj.Shape == 0) then
return ((pos - obj.Position).magnitude - obj.Size.magnitude / 2)
else
local relPos = obj.CFrame:pointToObjectSpace(pos)
local nearPos = relPos
if (nearPos.x * 2 > obj.Size.x) then
nearPos = Vector3.new(obj.Size.x / 2, nearPos.y, nearPos.z)
elseif (nearPos.x * 2 < -obj.Size.x) then
nearPos = Vector3.new(-obj.Size.x / 2, nearPos.y, nearPos.z)
end
if (nearPos.y * 2 > obj.Size.y) then
nearPos = Vector3.new(nearPos.x, obj.Size.y / 2, nearPos.z)
elseif (nearPos.y * 2 < -obj.Size.y) then
nearPos = Vector3.new(nearPos.x, -obj.Size.y / 2, nearPos.z)
end
if (nearPos.z * 2 > obj.Size.z) then
nearPos = Vector3.new(nearPos.x, nearPos.y, obj.Size.x / 2)
elseif (nearPos.z * 2 < -obj.Size.z) then
nearPos = Vector3.new(nearPos.x, nearPos.y, -obj.Size.x / 2)
end
return (nearPos - relPos).magnitude
end
end
function drop()
if TKCF ~= nil then
TKCF:remove()
TKCF = nil
end
end
function grab(pos, obj, harmless, MaxForce)
if (obj:IsA"Terrain") then return end
if (obj:FindFirstChild("Telekinesis Influence") ~= nil) then
return
end
if (obj:IsA"Part") or (obj:IsA"Seat") or (obj:IsA"SpawnLocation") then
if (brickDistance(obj, pos) < grValue.Value) and (not obj.Anchored) and (h == nil) then
local harm = obj:FindFirstChild("No TK Damage")
local oldScript = obj:FindFirstChild("BrickScript")
if oldScript ~= nil then
oldScript:remove()
end
local BrickScriptCopy = BrickScript:Clone()
BrickScriptCopy.Disabled = false
BrickScriptCopy.Archivable = false
if harmless or (harm ~= nil) then
local noDamage = Instance.new("BoolValue")
noDamage.Name = "No Damage"
noDamage.Parent = BrickScriptCopy
end
local tag2 = Instance.new("ObjectValue")
tag2.Name = "TK CFrame"
tag2.Value = TKCF
tag2.Parent = BrickScriptCopy
BrickScriptCopy.Parent = obj
local mass = obj:GetMass()
totalMass = totalMass + mass
delay(0.1, function() if (totalMass * 1400 > MaxForce) and (mass * MaxForce / totalMass < 91700) then local bp = obj:FindFirstChild("Telekinesis Influence") if (bp ~= nil) then bp.maxForce = mass * Vector3.new(1, 1, 1) * MaxForce / totalMass end end end)
end
elseif (obj:IsA"Workspace" or obj:IsA"Model" or obj:IsA"Tool" or obj:IsA"Hat") and (obj ~= Player.Character) then
local h = obj:FindFirstChild("Humanoid")
local harm = obj:FindFirstChild("No TK Damage")
if (h == nil) or (h.Health <= 0) then
local list = obj:GetChildren()
for x = 1, #list do
grab(pos, list[x], (harm ~= nil) or harmless, MaxForce)
end
end
end
end
function onButton1Down(mouse)
if debounce then
return
end
local newBrickScript = Hopperbin:FindFirstChild("BrickScript")
if Hopperbin:FindFirstChild("BrickScript") ~= nil then
BrickScript = newBrickScript
end
drop()
local char = Player.Character
if char ~= nil then
local human = char.Humanoid
if (human == nil) or (human.Health <= 0) then
return
end
else
return
end
TKCF = Instance.new("CFrameValue")
TKCF.Name = "TK CFrame"
TKCF.Parent = Hopperbin
local relPos = mouse.Hit.p - Player.Character.PrimaryPart.Position
if (relPos.magnitude > tkrValue.Value) then
relPos = relPos.unit * tkrValue.Value
end
totalMass = 0
grab(Player.Character.PrimaryPart.Position + relPos, workspace, false, maxFValue.Value)
mouse.Icon = "rbxasset://textures\\GunWaitCursor.png"
end
function onButton1Up(mouse)
if (TKCF ~= nil) then
drop()
debounce = true
wait(rldValue.Value)
mouse.Icon = "rbxasset://textures\\GunCursor.png"
debounce = false
end
end
function updatePos(mouse)
if (TKCF ~= nil) then
local char = Player.Character
if (char ~= nil) then
local human = char.Humanoid
if (human == nil) or (human.Health <= 0) then
drop()
return
end
else
drop()
return
end
local mouseCF = mouse.Hit
TKPos = mouseCF.lookVector * tkrValue.Value
if (TKPos.y < -4.5) then
TKPos = TKPos * Vector3.new(1, 0, 1) + Vector3.new(0, -4.5, 0)
end
TKPos = TKPos + Player.Character.PrimaryPart.Position
TKCF.Value = CFrame.new(TKPos, TKPos + mouseCF.lookVector)
end
end
function onSelected(mouse)
mouse.Icon = "rbxasset://textures\\GunCursor.png"
mouseConnection = mouse.Button1Down:connect(function() onButton1Down(mouse) end)
mouse.Button1Up:connect(function() onButton1Up(mouse) end)
mouse.Idle:connect(function() updatePos(mouse) end)
mouse.Move:connect(function() updatePos(mouse) end)
mouse.KeyDown:connect(function(inst)
local key = inst:lower()
if key == "q" then
tkrValue.Value = tkrValue.Value - 5
elseif key == "e" then
tkrValue.Value = tkrValue.Value + 5
end
end)
end
function onDeselected()
if (mouseConnection ~= nil) then
mouseConnection:disconnect()
end
drop()
end
selectionConnection = Hopperbin.Selected:connect(onSelected)
Hopperbin.Deselected:connect(onDeselected)
Thanks for reading!
