Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- p = game.Players.LocalPlayer
- char = p.Character
- hum = char.Humanoid
- root=char.HumanoidRootPart
- torso = char.Torso
- local player = game.Players.LocalPlayer
- lig = Instance.new("PointLight",player.Character.Torso)
- lig.Color=Color3.new(255,0,0)
- m=player:GetMouse()
- bb = Instance.new("BillboardGui",player.Character.Head)
- bb.Enabled = true
- function newRay(start,face,range,wat)
- local rey=Ray.new(start.p,(face.p-start.p).Unit*range)
- hit,pos=Workspace:FindPartOnRayWithIgnoreList(rey,wat)
- return rey,hit,pos
- end
- aa1={}
- torso=game.Players.LocalPlayer.Character.Torso
- local WorldUp = Vector3.new(0,1,0)
- function look2(Vec1,Vec2)
- local Orig = Vec1
- Vec1 = Vec1+Vector3.new(0,1,0)
- Vec2 = Vec2+Vector3.new(0,1,0)
- local Forward = (Vec2-Vec1).unit
- local Up = (WorldUp-WorldUp:Dot(Forward)*Forward).unit
- local Right = Up:Cross(Forward).unit
- Forward = -Forward
- Right = -Right
- return CFrame.new(Orig.X,Orig.Y,Orig.Z,Right.X,Up.X,Forward.X,Right.Y,Up.Y,Forward.Y,Right.Z,Up.Z,Forward.Z)
- end
- function look(CFr,Vec2)
- local A = Vector3.new(0,0,0)
- local B = CFr:inverse()*Vec2
- local CF = look2(A,Vector3.new(A.X,B.Y,B.Z))
- if B.Z > 0 then
- CF = CFr*(CF*CFrame.Angles(0,0,math.pi))
- elseif B.Z == 0 then
- if B.Y > 0 then
- CF = CFr*CFrame.Angles(math.pi/2,0,0)
- elseif B.Y < 0 then
- CF = CFr*CFrame.Angles(-math.pi/2,0,0)
- else
- CF = CFr
- end
- end
- local _,_,_,_,X,_,_,Y,_,_,Z,_ = CF:components()
- local Up = Vector3.new(X,Y,Z)
- local Forward = (Vec2-CFr.p).unit
- local Right = Up:Cross(Forward)
- Forward = -Forward
- Right = -Right
- return CFrame.new(CFr.X,CFr.Y,CFr.Z,Right.X,Up.X,Forward.X,Right.Y,Up.Y,Forward.Y,Right.Z,Up.Z,Forward.Z)
- end
- function simulate(j,d,m,r,t)
- local joint = j
- for i,v in ipairs(t) do
- if v[1]:FindFirstChild("Weld") then
- local stiff = m.CFrame.lookVector*0.03
- if i > 1 then joint = t[i-1][1].CFrame*CFrame.new(0,0,d*.5) end
- local dir = (v[2].p-(joint.p+Vector3.new(0,0.2,0)+stiff)).unit
- local dis = (v[2].p-(joint.p+Vector3.new(0,0.2,0)+stiff)).magnitude
- local pos = joint.p+(dir*(d*0.5))
- --if v[1].CFrame.y<=workspace.Base.CFrame.y then pos = joint.p+(dir*(d*.5)) end
- local inv = v[1].Weld.Part0.CFrame
- local rel1 = inv:inverse()*pos
- local rel2 = inv:inverse()*(pos-(dir*dis))
- local cf = look(CFrame.new(rel1),rel2)--CFrame.new(pos,pos-(dir*dis))*CFrame.fromEulerAnglesXYZ(r.x,r.y,r.z)
- v[1].Weld.C0 = cf
- v[2] = inv*cf
- --v[1].CFrame = cf
- end
- end
- end
- for i=1,8 do
- local p = Instance.new("Part",char)
- p.Anchored = false
- p.BrickColor = BrickColor.new("Really black","Black")
- p.CanCollide = false
- p.FormFactor="Custom"
- p.Material = "Granite"
- p.TopSurface = "SmoothNoOutlines"
- p.BottomSurface = "SmoothNoOutlines"
- p.RightSurface = "SmoothNoOutlines"
- p.LeftSurface = "SmoothNoOutlines"
- p.FrontSurface = "SmoothNoOutlines"
- p.BackSurface = "SmoothNoOutlines"
- p.Size=Vector3.new(2,.2,0.2)
- p:BreakJoints() -- sometimes the parts are stuck to something so you have to breakjoints them
- mesh = Instance.new("BlockMesh",p)
- mesh.Scale = Vector3.new(1,1,4)
- local w = Instance.new("Motor6D",p)
- w.Part0 = aa1[i-1] and aa1[i-1][1] or torso
- w.Part1 = p
- w.Name = "Weld"
- --table.insert(aa1,p)
- aa1[i] = {p,p.CFrame}
- end
- game:service"RunService".Stepped:connect(function()
- simulate(torso.CFrame*CFrame.new(0,0.9,.5),.6,torso,Vector3.new(),aa1)
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement