1681 lines
53 KiB
Text
1681 lines
53 KiB
Text
-- Extreme Rare Script! --
|
|
-- Its Parkour Time script --
|
|
-- Owned by Immunidon, not the script --
|
|
|
|
local player = game:service("Players").LocalPlayer
|
|
local mouse = player:GetMouse()
|
|
local cam = workspace.CurrentCamera
|
|
local char = player.Character
|
|
local Torsoz = char:findFirstChild("Torso")
|
|
local RA = char:findFirstChild("Right Arm")
|
|
local LA = char:findFirstChild("Left Arm")
|
|
local RL = char:findFirstChild("Right Leg")
|
|
local LL = char:findFirstChild("Left Leg")
|
|
local H = char:findFirstChild("Head")
|
|
local Hu = char:findFirstChild("Humanoid")
|
|
local RS = Torsoz:findFirstChild("Right Shoulder")
|
|
local LS = Torsoz:findFirstChild("Left Shoulder")
|
|
local RH = Torsoz:findFirstChild("Right Hip")
|
|
local LH = Torsoz:findFirstChild("Left Hip")
|
|
local N = Torsoz:findFirstChild("Neck")
|
|
local NV = Vector3.new(0,0,0)
|
|
local FOV = 70
|
|
local Shift, Space, Sitting = false,false,false
|
|
local GravPoint = 0
|
|
local Diving = false
|
|
local DivingCooldown = 0
|
|
local DivingDir = NV
|
|
local DivingCF = CFrame.new(0,0,0)
|
|
local DivingBG, DivingBV
|
|
local HWallRunning = false
|
|
local HWRGravDrop = false
|
|
local HWRLastPart
|
|
local HWRCooldown = 0
|
|
local HWRDir
|
|
local VWallRunning = false
|
|
local VWRLastPart
|
|
local VWRCooldown = 0
|
|
local VWRLeft,VWRRight = false,false
|
|
local Sliding = false
|
|
local SlideCooldown = 0
|
|
local Standing = true
|
|
local Action = "Standing"
|
|
local animplus = true
|
|
local animspeed = 0
|
|
local animangle = 0.01
|
|
local Joint1, Joint2, Joint3, Joint4, Joint5
|
|
|
|
for i, v in pairs(char:children()) do
|
|
if (v.className == "LocalScript" and v.Name == "ParkourSkrip") or v.className == "NumberValue" or v.className == "BoolValue" or v.className == "Model" or v.Name == "Animate" then
|
|
v:remove()
|
|
end
|
|
end
|
|
|
|
local loadids = {112474909, 112474911, 112474909}
|
|
|
|
local stamina = 999999
|
|
local maxstamina = 999999
|
|
local defsprint = 28
|
|
local sprint = defsprint
|
|
|
|
local pause = Instance.new("BoolValue", char)
|
|
pause.Name = "Pause"
|
|
pause.Value = false
|
|
local flow = Instance.new("NumberValue", char)
|
|
flow.Name = "Flow"
|
|
flow.Value = 0
|
|
local flowcooldown = 0
|
|
|
|
local m = Instance.new("Model", char)
|
|
m.Name = "FlowChainPartz"
|
|
|
|
local P = Instance.new("Part")
|
|
P.Name = "TrailPart"
|
|
P.formFactor = "Custom"
|
|
P.Size = Vector3.new(0.2,0.2,0.2)
|
|
P.Locked = true
|
|
P.Anchored = true
|
|
P.CanCollide = false
|
|
P.TopSurface = 0
|
|
P.BottomSurface = 0
|
|
|
|
script.Name = "ParkourSkrip"
|
|
|
|
local hue = 0
|
|
|
|
function HSV(H,S,V)
|
|
H = H % 360
|
|
local C = V * S
|
|
local H2 = H/60
|
|
local X = C * (1 - math.abs((H2 %2) -1))
|
|
local color = Color3.new(0,0,0)
|
|
if H2 <= 0 then
|
|
color = Color3.new(C,0,0)
|
|
elseif 0 <= H2 and H2 <= 1 then
|
|
color = Color3.new(C,X,0)
|
|
elseif 1 <= H2 and H2 <= 2 then
|
|
color = Color3.new(X,C,0)
|
|
elseif 2 <= H2 and H2 <= 3 then
|
|
color = Color3.new(0,C,X)
|
|
elseif 3 <= H2 and H2 <= 4 then
|
|
color = Color3.new(0,X,C)
|
|
elseif 4 <= H2 and H2 <= 5 then
|
|
color = Color3.new(X,0,C)
|
|
elseif 5 <= H2 and H2 <= 6 then
|
|
color = Color3.new(C,0,X)
|
|
end
|
|
local m = V - C
|
|
return Color3.new(color.r + m, color.g + m, color.b + m)
|
|
end
|
|
|
|
function GetWeld(weld)
|
|
if weld:findFirstChild("XAngle") == nil then
|
|
local a = Instance.new("NumberValue", weld)
|
|
a.Name = "XAngle"
|
|
end
|
|
if weld:findFirstChild("YAngle") == nil then
|
|
local a = Instance.new("NumberValue", weld)
|
|
a.Name = "YAngle"
|
|
end
|
|
if weld:findFirstChild("ZAngle") == nil then
|
|
local a = Instance.new("NumberValue", weld)
|
|
a.Name = "ZAngle"
|
|
end
|
|
return weld.C0.p, Vector3.new(weld.XAngle.Value, weld.YAngle.Value, weld.ZAngle.Value)
|
|
end
|
|
|
|
function SetWeld(weld, i, loops, origpos,origangle, nextpos,nextangle)
|
|
if weld:findFirstChild("XAngle") == nil then
|
|
local a = Instance.new("NumberValue", weld)
|
|
a.Name = "XAngle"
|
|
end
|
|
if weld:findFirstChild("YAngle") == nil then
|
|
local a = Instance.new("NumberValue", weld)
|
|
a.Name = "YAngle"
|
|
end
|
|
if weld:findFirstChild("ZAngle") == nil then
|
|
local a = Instance.new("NumberValue", weld)
|
|
a.Name = "ZAngle"
|
|
end
|
|
|
|
local tox,toy,toz = 0,0,0
|
|
if origangle.x > nextangle.x then
|
|
tox = -math.abs(origangle.x - nextangle.x) /loops*i
|
|
else
|
|
tox = math.abs(origangle.x - nextangle.x) /loops*i
|
|
end
|
|
if origangle.y > nextangle.y then
|
|
toy = -math.abs(origangle.y - nextangle.y) /loops*i
|
|
else
|
|
toy = math.abs(origangle.y - nextangle.y) /loops*i
|
|
end
|
|
if origangle.z > nextangle.z then
|
|
toz = -math.abs(origangle.z - nextangle.z) /loops*i
|
|
else
|
|
toz = math.abs(origangle.z - nextangle.z) /loops*i
|
|
end
|
|
|
|
local tox2,toy2,toz2 = 0,0,0
|
|
if origpos.x > nextpos.x then
|
|
tox2 = -math.abs(origpos.x - nextpos.x) /loops*i
|
|
else
|
|
tox2 = math.abs(origpos.x - nextpos.x) /loops*i
|
|
end
|
|
if origpos.y > nextpos.y then
|
|
toy2 = -math.abs(origpos.y - nextpos.y) /loops*i
|
|
else
|
|
toy2 = math.abs(origpos.y - nextpos.y) /loops*i
|
|
end
|
|
if origpos.z > nextpos.z then
|
|
toz2 = -math.abs(origpos.z - nextpos.z) /loops*i
|
|
else
|
|
toz2 = math.abs(origpos.z - nextpos.z) /loops*i
|
|
end
|
|
|
|
weld.XAngle.Value = origangle.x + tox
|
|
weld.YAngle.Value = origangle.y + toy
|
|
weld.ZAngle.Value = origangle.z + toz
|
|
weld.C0 = CFrame.new(origpos.x + tox2,origpos.y + toy2,origpos.z + toz2) * CFrame.Angles(origangle.x + tox,origangle.y + toy,origangle.z + toz)
|
|
end
|
|
|
|
function LoadTextures()
|
|
local pls = game:service("ContentProvider")
|
|
for i, v in pairs(loadids) do
|
|
pls:Preload("http://www.roblox.com/asset/?id="..v)
|
|
wait(0.04)
|
|
end
|
|
end
|
|
LoadTextures()
|
|
|
|
function CreateGui()
|
|
for i, v in pairs(player.PlayerGui:children()) do
|
|
if v.className == "ScreenGui" and v.Name == "staminaGui" then
|
|
v:remove()
|
|
end
|
|
end
|
|
local g = Instance.new("ScreenGui", player.PlayerGui)
|
|
g.Name = "staminaGui"
|
|
|
|
local c = Instance.new("Frame", g)
|
|
c.Visible = false
|
|
c.Size = UDim2.new(0,86,0,320)
|
|
c.BackgroundTransparency = 1
|
|
c.Position = UDim2.new(1,-96,0.5,-160)
|
|
c.Name = "Container"
|
|
|
|
local t = Instance.new("TextLabel", c)
|
|
t.Size = UDim2.new(0,0,-0.1,0)
|
|
t.Position = UDim2.new(0.3,0,0.5,0)
|
|
t.TextXAlignment = "Right"
|
|
t.Font = "ArialBold"
|
|
t.TextTransparency = 0.1
|
|
t.TextColor3 = Color3.new(0,0.6,0.8)
|
|
t.TextStrokeColor3 = Color3.new(0,0.2,0.8)
|
|
t.TextStrokeTransparency = 0.3
|
|
t.FontSize = 6
|
|
t.BackgroundTransparency = 1
|
|
local t2 = t:Clone()
|
|
t2.Parent = c
|
|
t2.Size = UDim2.new(0,0,0.1,0)
|
|
local l = t:Clone()
|
|
l.Parent = c
|
|
l.Size = UDim2.new(0,0,0,0)
|
|
l.Text = "-----"
|
|
|
|
local f1 = Instance.new("Frame", c)
|
|
f1.Name = "Backing"
|
|
f1.ClipsDescendants = true
|
|
f1.Size = UDim2.new(1,0,0,0)
|
|
f1.BackgroundColor3 = Color3.new(0.8,0,0)
|
|
f1.BackgroundTransparency = 1
|
|
local f1img = Instance.new("ImageLabel", f1)
|
|
f1img.BackgroundTransparency = 1
|
|
f1img.Image = "http://www.roblox.com/asset/?id=112474909"
|
|
f1img.Size = UDim2.new(1,0,0,c.Size.Y.Offset)
|
|
|
|
local f2 = Instance.new("Frame", c)
|
|
f2.Name = "Overlay"
|
|
f2.ClipsDescendants = true
|
|
f2.Size = UDim2.new(1,0,1,0)
|
|
f2.BackgroundColor3 = Color3.new(0,0,0.8)
|
|
f2.BackgroundTransparency = 1
|
|
local f2img = Instance.new("ImageLabel", f2)
|
|
f2img.BackgroundTransparency = 1
|
|
f2img.Image = "http://www.roblox.com/asset/?id=112474911"
|
|
f2img.Size = UDim2.new(1,0,0,c.Size.Y.Offset)
|
|
|
|
function Calculate()
|
|
local ysize = c.Size.Y.Offset
|
|
local per = (stamina/maxstamina) * c.Size.Y.Offset
|
|
local rem = (-(stamina/maxstamina-1)) * c.Size.Y.Offset
|
|
f1.Size = UDim2.new(1,0,0,rem)
|
|
f2.Size = UDim2.new(1,0,0,per)
|
|
f2.Position = UDim2.new(0,0,0,rem)
|
|
f2img.Position = UDim2.new(0,0,0,-rem)
|
|
t.Text = math.floor(stamina)
|
|
t2.Text = maxstamina
|
|
end
|
|
Calculate()
|
|
|
|
wait(0.01)
|
|
c.Visible = true
|
|
end
|
|
CreateGui()
|
|
|
|
player.CharacterAdded:connect(function()
|
|
char = player.Character
|
|
Torsoz = char:findFirstChild("Torso")
|
|
RA = char:findFirstChild("Right Arm")
|
|
LA = char:findFirstChild("Left Arm")
|
|
RL = char:findFirstChild("Right Leg")
|
|
LL = char:findFirstChild("Left Leg")
|
|
H = char:findFirstChild("Head")
|
|
Hu = char:findFirstChild("Humanoid")
|
|
RS = Torsoz:findFirstChild("Right Shoulder")
|
|
LS = Torsoz:findFirstChild("Left Shoulder")
|
|
RH = Torsoz:findFirstChild("Right Hip")
|
|
LH = Torsoz:findFirstChild("Left Hip")
|
|
N = Torsoz:findFirstChild("Neck")
|
|
stamina = maxstamina
|
|
CreateGui()
|
|
end)
|
|
|
|
function RAY(pos, dir, startpos, endpos, distleft, collidedlist)
|
|
collidedlist = collidedlist or {char}
|
|
startpos = startpos or pos
|
|
distleft = distleft or dir.unit * dir.magnitude
|
|
endpos = endpos or pos + distleft
|
|
local ray = Ray.new(pos, distleft)
|
|
local hitz,enz = workspace:FindPartOnRayWithIgnoreList(ray, collidedlist)
|
|
--[[
|
|
local p = P:Clone()
|
|
p.Parent = char
|
|
p.Size = Vector3.new(0.4,0.4,0.4)
|
|
p.BrickColor = BrickColor.new("Lime green")
|
|
p.CanCollide = false
|
|
p.CFrame = CFrame.new(enz)
|
|
p.Transparency = 0.3
|
|
]]
|
|
if hitz ~= nil then
|
|
if hitz.CanCollide == false then
|
|
table.insert(collidedlist, hitz)
|
|
local newpos = enz
|
|
local newdistleft = distleft - (dir.unit * (pos - newpos).magnitude)
|
|
if newdistleft ~= NV then
|
|
return RAY(newpos-(dir*0.01), dir, startpos, endpos, newdistleft+(dir*0.01), collidedlist)
|
|
end
|
|
end
|
|
end
|
|
|
|
return hitz, enz, ray
|
|
end
|
|
|
|
function Sit()
|
|
Standing = false
|
|
local hitz,enz = RAY(Torsoz.Position, Vector3.new(0,-4.1,0))
|
|
local tordir = Vector3.new(Torsoz.CFrame.lookVector.x,0,Torsoz.CFrame.lookVector.z)
|
|
if (hitz ~= nil and hitz.CanCollide == true) then
|
|
local cf = CFrame.new(enz+Vector3.new(0,1.28,0), enz+Vector3.new(0,1.28,0)+tordir) * CFrame.Angles(math.pi/6,0,0)
|
|
local hitz2,enz2 = RAY(enz+Vector3.new(0,2.25,0), tordir*-2.2)
|
|
Hu.PlatformStand = true
|
|
Torsoz.CFrame = cf
|
|
local bp = Instance.new("BodyPosition", Torsoz)
|
|
bp.Name = "StaminaBodyObject"
|
|
bp.maxForce = Vector3.new(1/0,1/0,1/0)
|
|
bp.D = 100
|
|
bp.position = cf.p
|
|
local bg = Instance.new("BodyGyro", Torsoz)
|
|
bg.Name = "StaminaBodyObject"
|
|
bg.maxTorque = Vector3.new(1/0,1/0,1/0)
|
|
bg.cframe = cf
|
|
bg.D = 100
|
|
SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.34,-1,0.2), Vector3.new((math.pi/2)-(math.pi/6),0,math.pi/8))
|
|
SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.34,-1,0.2), Vector3.new((math.pi/2)-(math.pi/6),0,-math.pi/8))
|
|
|
|
if hitz2 ~= nil and hitz2.CanCollide == true then
|
|
Joint3.C0 = CFrame.new(0.9,0.4,-0.45) * CFrame.Angles(0,math.pi/2.13,0) * CFrame.Angles(math.pi/2.3,0,0)
|
|
Joint4.C0 = CFrame.new(-0.9,0.4,-0.4) * CFrame.Angles(0,-math.pi/2.05,0) * CFrame.Angles(math.pi/2.3,0,0)
|
|
Joint5.C0 = CFrame.new(0,1,0) * CFrame.Angles(-math.pi/8.8,0,0)
|
|
else
|
|
SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.4,0.4,0.1), Vector3.new(-(math.pi/6)-(math.pi/10),0,math.pi/9))
|
|
SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.4,0.4,0.1), Vector3.new(-(math.pi/6)-(math.pi/10),0,-math.pi/9))
|
|
SetWeld(Joint5,1,1, NV,NV, Vector3.new(0,1,0), Vector3.new(-math.pi/12,0,0))
|
|
end
|
|
|
|
Sitting = true
|
|
Action = "Sitting"
|
|
end
|
|
end
|
|
|
|
|
|
function Stand()
|
|
Hu.PlatformStand = false
|
|
if Sitting == true then
|
|
local tordir = Torsoz.Position + (Torsoz.CFrame.lookVector*10000)
|
|
local cf = CFrame.new(Torsoz.Position + Vector3.new(0,1.8,0), Vector3.new(tordir.x,Torsoz.Position.y,tordir.z))
|
|
Torsoz.CFrame = cf
|
|
end
|
|
for i, v in pairs(Torsoz:children()) do
|
|
if v.Name == "StaminaBodyObject" then
|
|
v:remove()
|
|
end
|
|
end
|
|
RH.Part0 = nil
|
|
LH.Part0 = nil
|
|
RS.Part0 = nil
|
|
LS.Part0 = nil
|
|
Joint1.Part0 = Torsoz
|
|
Joint1.Part1 = RL
|
|
Joint1.C0 = CFrame.new(0.5,-1,0)
|
|
Joint1.C1 = CFrame.new(0,1,0)
|
|
Joint2.Part0 = Torsoz
|
|
Joint2.Part1 = LL
|
|
Joint2.C0 = CFrame.new(-0.5,-1,0)
|
|
Joint2.C1 = CFrame.new(0,1,0)
|
|
Joint3.Part0 = Torsoz
|
|
Joint3.Part1 = RA
|
|
Joint3.C0 = CFrame.new(1.5,0.5,0)
|
|
Joint3.C1 = CFrame.new(0,0.5,0)
|
|
Joint4.Part0 = Torsoz
|
|
Joint4.Part1 = LA
|
|
Joint4.C0 = CFrame.new(-1.5,0.5,0)
|
|
Joint4.C1 = CFrame.new(0,0.5,0)
|
|
Joint5.Part0 = Torsoz
|
|
Joint5.Part1 = H
|
|
Joint5.C0 = CFrame.new(0,1,0)
|
|
Joint5.C1 = CFrame.new(0,-0.5,0)
|
|
Sitting = false
|
|
Diving = false
|
|
Standing = true
|
|
Action = "Standing"
|
|
end
|
|
|
|
--------------------------------------- Dive ----------------------------------
|
|
|
|
function Dive()
|
|
stamina = stamina - 10
|
|
flow.Value = flow.Value + 10
|
|
if flow.Value > 100 then
|
|
flow.Value = 100
|
|
end
|
|
Standing = false
|
|
local dir = Vector3.new(Torsoz.CFrame.lookVector.x,0,Torsoz.CFrame.lookVector.z)
|
|
GravPoint = 18
|
|
DivingDir = dir
|
|
local cf = CFrame.new(Torsoz.Position, dir+Vector3.new(0,Torsoz.Position.y,0))
|
|
DivingCF = cf
|
|
DivingDir = dir
|
|
Hu.PlatformStand = true
|
|
local bv = Instance.new("BodyVelocity", Torsoz)
|
|
bv.Name = "StaminaBodyObject"
|
|
bv.maxForce = Vector3.new(1/0,1/0,1/0)
|
|
bv.velocity = Vector3.new(DivingDir.x*24,GravPoint,DivingDir.z*24)
|
|
DivingBV = bv
|
|
local bg = Instance.new("BodyGyro", Torsoz)
|
|
bg.Name = "StaminaBodyObject"
|
|
bg.maxTorque = Vector3.new(1/0,1/0,1/0)
|
|
bg.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+bv.velocity) * CFrame.Angles(-math.pi/2,0,0)
|
|
bg.D = 100
|
|
DivingBG = bg
|
|
|
|
local joint = Joint3
|
|
joint.C1 = CFrame.new(0,0.5,0)
|
|
local joint2 = Joint4
|
|
joint2.C1 = CFrame.new(0,0.5,0)
|
|
local joint3 = Joint1
|
|
joint3.C1 = CFrame.new(0,1,0)
|
|
local joint4 = Joint2
|
|
joint4.C1 = CFrame.new(0,1,0)
|
|
|
|
local joint5 = Joint5
|
|
|
|
Diving = true
|
|
Action = "Diving"
|
|
|
|
for i = 1, 8 do
|
|
SetWeld(joint,i,8, Vector3.new(1.5,0.5,0), NV, Vector3.new(1.45,0.5,0.1), Vector3.new(-0.2,-math.pi/9,math.pi/13))
|
|
SetWeld(joint2,i,8, Vector3.new(-1.5,0.5,0), NV, Vector3.new(-1.45,0.5,0.1), Vector3.new(-0.2,math.pi/9,-math.pi/13))
|
|
SetWeld(joint3,i,8, Vector3.new(0.5,-1,0), NV, Vector3.new(0.5,-1,0.03), Vector3.new(-0.2,-math.pi/10,math.pi/14))
|
|
SetWeld(joint4,i,8, Vector3.new(-0.5,-1,0), NV, Vector3.new(-0.5,-1,0.03), Vector3.new(-0.2,math.pi/10,-math.pi/14))
|
|
SetWeld(joint5,i,8, Vector3.new(0,1,0), NV, Vector3.new(0,1,0), Vector3.new(0.45,0,0))
|
|
wait(0.025)
|
|
end
|
|
|
|
local counter = 0
|
|
while Diving == true do
|
|
counter = counter + 1
|
|
bg.Parent = Torsoz
|
|
local hitz, enz = RAY(Torsoz.Position, bv.velocity.unit*4.6)
|
|
if hitz ~= nil and hitz.CanCollide == true then
|
|
local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-4,0))
|
|
if hitz2 ~= nil then
|
|
Diving = "Rolling"
|
|
Action = "DiveRolling"
|
|
else
|
|
Torsoz.CFrame = Torsoz.CFrame * CFrame.new(0,-0.3,0)
|
|
Torsoz.Velocity = NV
|
|
flow.Value = 0
|
|
break
|
|
end
|
|
end
|
|
if counter > 190 then
|
|
break
|
|
end
|
|
wait(0.02)
|
|
end
|
|
|
|
bv.velocity = (dir*20) + Vector3.new(0,-0.5,0)
|
|
|
|
local bgcf = bg.cframe
|
|
local haslanded = false
|
|
local count = 0
|
|
|
|
while haslanded == false do
|
|
bg.cframe = bgcf * CFrame.Angles(-0.3*count,0,0)
|
|
local hitz, enz = RAY(Torsoz.Position, ((Torsoz.CFrame*CFrame.new(0,-1,0)).p - Torsoz.CFrame.p).unit*1.6)
|
|
if hitz ~= nil and hitz.CanCollide == true then
|
|
haslanded = true
|
|
end
|
|
local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-3.8,0))
|
|
if hitz2 == nil then
|
|
Torsoz.Velocity = NV
|
|
break
|
|
elseif haslanded == true then
|
|
local bp = Instance.new("BodyPosition", Torsoz)
|
|
bp.Name = "StaminaJumpFix"
|
|
bp.maxForce = Vector3.new(0,1/0,0)
|
|
bp.P = 7000
|
|
bp.position = enz2 + Vector3.new(0,2.8,0)
|
|
game:service("Debris"):AddItem(bp, 0.3)
|
|
else
|
|
bv.velocity = (dir*20) + Vector3.new(0,-(Torsoz.Position - enz2).magnitude*3,0)
|
|
|
|
end
|
|
count = count + 1
|
|
if count <= 6 then
|
|
local i = count
|
|
local j1,j1a = GetWeld(joint)
|
|
local j2,j2a = GetWeld(joint2)
|
|
local j3,j3a = GetWeld(joint3)
|
|
local j4,j4a = GetWeld(joint4)
|
|
local j5,j5a = GetWeld(joint5)
|
|
SetWeld(joint,i,6, j1,j1a, Vector3.new(1.35,0.5,-0.2), Vector3.new(math.pi/2.6,0,-math.pi/5.8))
|
|
SetWeld(joint2,i,6, j2,j2a, Vector3.new(-1.35,0.5,-0.2), Vector3.new(math.pi/2.6,0,math.pi/5.8))
|
|
SetWeld(joint3,i,6, j3,j3a, Vector3.new(0.51,0.4,-0.6), Vector3.new(-0.1,0,0.05))
|
|
SetWeld(joint4,i,6, j4,j4a, Vector3.new(-0.51,0.4,-0.6), Vector3.new(-0.1,0,-0.05))
|
|
SetWeld(joint5,i,6, j5,j5a, Vector3.new(0,1,0), Vector3.new(-0.4,0,0))
|
|
elseif count >= 50 then
|
|
break
|
|
end
|
|
wait(0.02)
|
|
end
|
|
|
|
Torsoz.Velocity = NV
|
|
|
|
Stand()
|
|
DivingCooldown = 9
|
|
end
|
|
|
|
function FindSurface(part, position)
|
|
local obj = part.CFrame:pointToObjectSpace(position)
|
|
local siz = part.Size/2
|
|
for i,v in pairs(Enum.NormalId:GetEnumItems()) do
|
|
local vec = Vector3.FromNormalId(v)
|
|
local wvec = part.CFrame:vectorToWorldSpace(vec)
|
|
local vz = (obj)/(siz*vec)
|
|
if (math.abs(vz.X-1) < 0.01 or math.abs(vz.Y-1) < 0.01 or math.abs(vz.Z-1) < 0.01) then
|
|
return wvec,vec
|
|
end
|
|
end
|
|
if part.className == "WedgePart" then
|
|
return part.CFrame:vectorToWorldSpace(Vector3.new(0,0.707,-0.707)), Vector3.new(0,0.707,-0.707)
|
|
end
|
|
end
|
|
|
|
function HWallRun(part, pos, side)
|
|
if (part.className == "Part" and part.Shape == Enum.PartType.Block) or part.className ~= "Part" then
|
|
flow.Value = flow.Value + 9
|
|
Standing = false
|
|
HWallRunning = true
|
|
Action = "HWallRunning"
|
|
GravPoint = 10
|
|
HWRLastPart = part
|
|
local dir, dirc = FindSurface(part, pos)
|
|
towall = -dir
|
|
dir = (CFrame.new(NV, dir) * CFrame.Angles(0,side,0)).lookVector
|
|
|
|
local bv = Instance.new("BodyVelocity", Torsoz)
|
|
bv.Name = "StaminaBodyObject"
|
|
bv.maxForce = Vector3.new(1/0,1/0,1/0)
|
|
bv.P = 9000
|
|
bv.velocity = (dir*(sprint-0.5)) + Vector3.new(0,GravPoint,0)
|
|
local bg = Instance.new("BodyGyro", Torsoz)
|
|
bg.Name = "StaminaBodyObject"
|
|
bg.maxTorque = Vector3.new(1/0,1/0,1/0)
|
|
bg.cframe = CFrame.new(Torsoz.Position+(towall*-2), Torsoz.Position) * CFrame.Angles(0,-side,-side/4.2)
|
|
bg.D = 100
|
|
|
|
local sid = Instance.new("Snap")
|
|
|
|
local joint1 = Joint3
|
|
if side == -math.pi/2 then
|
|
SetWeld(joint1,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new(math.pi/1.3,0.1,math.pi/2.5))
|
|
else
|
|
sid = joint1
|
|
SetWeld(joint1,1,1, NV,NV, Vector3.new(1.4,0.6,0), Vector3.new(-math.pi/12,0,math.pi/7))
|
|
end
|
|
local j1c0 = joint1.C0
|
|
|
|
local joint2 = Joint4
|
|
if side == math.pi/2 then
|
|
SetWeld(joint2,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new(math.pi/1.3,-0.1,-math.pi/2.5))
|
|
else
|
|
sid = joint2
|
|
SetWeld(joint2,1,1, NV,NV, Vector3.new(-1.4,0.6,0), Vector3.new(-math.pi/12,0,-math.pi/7))
|
|
end
|
|
local j2c0 = joint2.C0
|
|
|
|
local joint3 = Joint1
|
|
joint3.C1 = CFrame.new(0,1,0)
|
|
if side == -math.pi/2 then
|
|
SetWeld(joint3,1,1, NV,NV, Vector3.new(0.5,-0.38,-0.3), Vector3.new(0,math.pi/2,0.14))
|
|
else
|
|
SetWeld(joint3,1,1, NV,NV, Vector3.new(0.5,-0.8,-0.2), Vector3.new(0,math.pi/2,0.2))
|
|
end
|
|
|
|
local joint4 = Joint2
|
|
joint4.C1 = CFrame.new(0,1,0)
|
|
if side == -math.pi/2 then
|
|
SetWeld(joint4,1,1, NV,NV, Vector3.new(-0.5,-0.8,-0.2), Vector3.new(0,0,0.2))
|
|
else
|
|
SetWeld(joint4,1,1, NV,NV, Vector3.new(-0.5,-0.38,-0.3), Vector3.new(0,0,0.14))
|
|
end
|
|
|
|
local joint5 = Joint5
|
|
SetWeld(joint5,1,1,NV,NV,Vector3.new(0,0.9,0),Vector3.new(0,0,side/7))
|
|
|
|
Torsoz.CFrame = CFrame.new(pos+(towall*-2), pos) * CFrame.Angles(0,-side,-side/2.2)
|
|
bg.cframe = CFrame.new(pos+(towall*-2), pos) * CFrame.Angles(0,-side,-side/2.2)
|
|
|
|
local aniangle = 0
|
|
local aniplus = true
|
|
local aniangle2 = 0
|
|
local aniplus2 = true
|
|
|
|
local prevpart = part
|
|
HWRLastPart = part
|
|
while HWallRunning == true do
|
|
|
|
if aniangle > math.pi then
|
|
aniplus = false
|
|
elseif aniangle < -math.pi then
|
|
aniplus = true
|
|
end
|
|
if aniplus == true then
|
|
aniangle = aniangle + 0.95
|
|
elseif aniplus == false then
|
|
aniangle = aniangle - 0.95
|
|
end
|
|
|
|
if aniangle2 > math.pi then
|
|
aniplus2 = false
|
|
elseif aniangle2 < -math.pi then
|
|
aniplus2 = true
|
|
end
|
|
if aniplus2 == true then
|
|
aniangle2 = aniangle2 + 0.23
|
|
elseif aniplus2 == false then
|
|
aniangle2 = aniangle2 - 0.23
|
|
end
|
|
|
|
Hu.PlatformStand = true
|
|
local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-3,0))
|
|
local hitz2, enz2 = RAY(Torsoz.Position, towall*3.4)
|
|
|
|
--- if player ends wall run on ground
|
|
if hitz ~= nil and hitz.CanCollide == true then
|
|
bg.cframe = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side,0)
|
|
local offset = (bg.cframe.p.y+enz2.y) - bg.cframe.p.y
|
|
Torsoz.CFrame = CFrame.new(Vector3.new(bg.cframe.p.x,offset,bg.cframe.p.z), enz2) * CFrame.Angles(0,-side,0)
|
|
Torsoz.Velocity = NV
|
|
break
|
|
end
|
|
|
|
---- if new wall found --------
|
|
if hitz2 ~= nil and hitz2.CanCollide == true then
|
|
if hitz2 ~= prevpart then
|
|
local direct = CFrame.new(Torsoz.Position, Torsoz.Position+dir) * CFrame.Angles(0,side,0)
|
|
local hitz3, enz3 = RAY(Torsoz.Position, (direct * CFrame.Angles(0,-side/2.3,0)).lookVector*4)
|
|
if hitz3 ~= nil then
|
|
Torsoz.CFrame = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side*1.1,-side/2.2)
|
|
bg.cframe = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side*1.1,-side/2.2)
|
|
dir, dirc = FindSurface(hitz2, enz2)
|
|
towall = -dir
|
|
dir = (CFrame.new(NV, dir) * CFrame.Angles(0,side,0)).lookVector
|
|
prevpart = hitz2
|
|
HWRLastPart = hitz2
|
|
else
|
|
---- if player fails to find new wall to run on
|
|
Torsoz.CFrame = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
|
|
bg.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
|
|
Torsoz.Velocity = NV
|
|
HWRCooldown = 8
|
|
break
|
|
end
|
|
end
|
|
--- continue to wall run
|
|
Torsoz.CFrame = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side,-side/2.2)
|
|
bg.cframe = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side,-side/2.2)
|
|
else
|
|
---- if player ends wall run at end of wall
|
|
Torsoz.CFrame = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
|
|
bg.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
|
|
Torsoz.Velocity = NV
|
|
HWRCooldown = 8
|
|
break
|
|
end
|
|
|
|
local hitz3, enz3 = RAY(Torsoz.Position, Torsoz.CFrame.lookVector*2)
|
|
if hitz3 ~= nil and hitz3.CanCollide == true then
|
|
Torsoz.CFrame = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
|
|
bg.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+dir)
|
|
Torsoz.Velocity = NV
|
|
HWRCooldown = 8
|
|
break
|
|
end
|
|
|
|
bv.Parent = Torsoz
|
|
bv.velocity = (dir*(sprint-0.5)) + Vector3.new(0,GravPoint,0)
|
|
bg.cframe = bg.cframe * CFrame.Angles(aniangle/80,aniangle/80,0)
|
|
Torsoz.CFrame = Torsoz.CFrame * CFrame.Angles(aniangle/80,aniangle/80,0)
|
|
local j3,j3a = GetWeld(joint3)
|
|
local j4,j4a = GetWeld(joint4)
|
|
SetWeld(joint3,1,1, j3,j3a, j3,Vector3.new(-0.2+(aniangle/4),0,0))
|
|
SetWeld(joint4,1,1, j4,j4a, j4,Vector3.new(-0.2+(-aniangle/4),0,0))
|
|
if side == math.pi/2 then
|
|
local j1,j1a = GetWeld(joint1)
|
|
SetWeld(joint1,1,1, j1,j1a, j1, Vector3.new(0,0,0.8+(aniangle2/14)))
|
|
else
|
|
local j2,j2a = GetWeld(joint2)
|
|
SetWeld(joint2,1,1, j2,j2a, j2, Vector3.new(0,0,-0.8-(aniangle2/14)))
|
|
end
|
|
|
|
wait(0.025)
|
|
if GravPoint < -100 then
|
|
bg.cframe = CFrame.new(enz2+(towall*-2), enz2) * CFrame.Angles(0,-side,0)
|
|
local offset = math.abs((bg.cframe.p.y+enz2.y) - bg.cframe.p.y)
|
|
Torsoz.CFrame = CFrame.new(Vector3.new(bg.cframe.p.x,offset,bg.cframe.p.z), enz2) * CFrame.Angles(0,-side,0)
|
|
break
|
|
end
|
|
|
|
end
|
|
|
|
if HWallRunning == "Jumping" then
|
|
HWRCooldown = 6
|
|
joint1.C1 = CFrame.new(0,0.5,0)
|
|
|
|
joint2.C1 = CFrame.new(0,0.5,0)
|
|
if side == -math.pi/2 then
|
|
joint2.C0 = CFrame.new(-1.35,0.5,0) * CFrame.Angles(0,side/2.4,-math.pi/3)
|
|
else
|
|
joint2.C0 = CFrame.new(-1.35,0.5,0) * CFrame.Angles(0,side/2.4,-math.pi/4)
|
|
end
|
|
|
|
joint3.C1 = CFrame.new(0,1,0)
|
|
if side == -math.pi/2 then
|
|
joint3.C0 = CFrame.new(0.5,-0.8,0) * CFrame.Angles(0,math.pi+(side/2.4),-math.pi/4)
|
|
else
|
|
joint3.C0 = CFrame.new(0.5,-0.8,0) * CFrame.Angles(0,(side/2.4),math.pi/4)
|
|
end
|
|
joint4.MaxVelocity = 10
|
|
joint4.DesiredAngle = 0
|
|
joint4.C1 = CFrame.new(0,1,0)
|
|
if side == -math.pi/2 then
|
|
joint4.C0 = CFrame.new(-0.5,-0.8,0) * CFrame.Angles(0,math.pi+(side/2.4),math.pi/4)
|
|
else
|
|
joint4.C0 = CFrame.new(-0.5,-0.8,0) * CFrame.Angles(0,(side/2.4),-math.pi/4)
|
|
end
|
|
|
|
local joint5 = Joint5
|
|
joint5.C1 = CFrame.new(0,-0.5,0) * CFrame.Angles(0,side/2.4,0)
|
|
joint5.C0 = CFrame.new(0,1,0)
|
|
|
|
local j1,j1a = GetWeld(joint1)
|
|
local j2,j2a = GetWeld(joint2)
|
|
local j3,j3a = GetWeld(joint3)
|
|
local j4,j4a = GetWeld(joint4)
|
|
local j5,j5a = GetWeld(joint5)
|
|
|
|
GravPoint = 26
|
|
local collidecount = 0
|
|
local bgangle = side/2
|
|
local count = 1
|
|
local dir2 = (CFrame.new(NV, dir) * CFrame.Angles(0,-side/2.4,0)).lookVector
|
|
HWRDir = dir2
|
|
bv.velocity = (dir2*(sprint+5)) + Vector3.new(0,GravPoint,0)
|
|
while HWallRunning == "Jumping" do
|
|
local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-4,0))
|
|
local hitz2, enz2 = RAY(Torsoz.Position, dir2*1.4)
|
|
if hitz ~= nil and hitz.CanCollide == true then
|
|
local offset = math.abs(enz.y - Torsoz.CFrame.p.y)
|
|
Torsoz.CFrame = CFrame.new(enz+Vector3.new(0,2.9,0), enz+Vector3.new(0,2.9,0)+dir2)
|
|
Torsoz.Velocity = NV
|
|
break
|
|
end
|
|
|
|
if hitz2 ~= nil and hitz2.CanCollide == true then
|
|
collidecount = collidecount + 1
|
|
if collidecount == 4 then
|
|
Torsoz.CFrame = CFrame.new(Torsoz.Position, Torsoz.Position+dir2) * CFrame.new(0,0,0.4)
|
|
Torsoz.Velocity = Vector3.new(0,Torsoz.Velocity.y,0)
|
|
HWRCooldown = 5
|
|
VWRCooldown = 5
|
|
wait(0.02)
|
|
break
|
|
end
|
|
end
|
|
|
|
if side/2 > 0 then
|
|
if bgangle > 0.2 then
|
|
bgangle = bgangle - 0.055
|
|
end
|
|
else
|
|
if bgangle < -0.2 then
|
|
bgangle = bgangle + 0.055
|
|
end
|
|
end
|
|
|
|
if count <= 5 then
|
|
if side == -math.pi/2 then
|
|
SetWeld(joint1,count,5, j1,j1a, Vector3.new(1.35,0.5,0), Vector3.new(0,side/2.4,math.pi/4))
|
|
SetWeld(joint2,count,5, j2,j2a, Vector3.new(-1.35,0.5,0), Vector3.new(0,side/2.4,-math.pi/3))
|
|
SetWeld(joint3,count,5, j3,j3a, Vector3.new(0.5,-0.8,0), Vector3.new(0,-side/1.7,0))
|
|
joint3.C0 = joint3.C0 * CFrame.Angles((-math.pi/4)/5*count,0,0)
|
|
SetWeld(joint4,count,5, j4,j4a, Vector3.new(-0.5,-0.8,0), Vector3.new(0,-side/1.7,0))
|
|
joint4.C0 = joint4.C0 * CFrame.Angles((math.pi/4)/5*count,0,0)
|
|
else
|
|
SetWeld(joint1,count,5, j1,j1a, Vector3.new(1.35,0.5,0), Vector3.new(0,side/2.4,math.pi/3))
|
|
SetWeld(joint2,count,5, j2,j2a, Vector3.new(-1.35,0.5,0), Vector3.new(0,side/2.4,-math.pi/4))
|
|
SetWeld(joint3,count,5, j3,j3a, Vector3.new(0.5,-0.8,0), Vector3.new(0,-side/1.7,0))
|
|
joint3.C0 = joint3.C0 * CFrame.Angles((math.pi/4)/5*count,0,0)
|
|
SetWeld(joint4,count,5, j4,j4a, Vector3.new(-0.5,-0.8,0), Vector3.new(0,-side/1.7,0))
|
|
joint4.C0 = joint4.C0 * CFrame.Angles((-math.pi/4)/5*count,0,0)
|
|
end
|
|
|
|
count = count + 1
|
|
end
|
|
|
|
bg.Parent = Torsoz
|
|
bg.cframe = CFrame.new(NV, dir) * CFrame.Angles(0,side/15,-bgangle)
|
|
bv.velocity = (dir2*(sprint+5)) + Vector3.new(0,GravPoint,0)
|
|
if collidecount ~= 0 then
|
|
bv.velocity = Vector3.new(0,bv.velocity.y,0)
|
|
end
|
|
if GravPoint < -120 then
|
|
break
|
|
end
|
|
wait(0.025)
|
|
end
|
|
end
|
|
|
|
Hu.PlatformStand = false
|
|
bv:remove()
|
|
|
|
HWRGravDrop = false
|
|
Stand()
|
|
HWallRunning = false
|
|
end
|
|
end
|
|
|
|
function VWR(part, pos)
|
|
if (part.className == "Part" and part.Shape == Enum.PartType.Block) or part.className ~= "Part" then
|
|
print("VWR Activated")
|
|
flow.Value = flow.Value + 9
|
|
Standing = false
|
|
VWallRunning = true
|
|
Action = "VWallRunning"
|
|
GravPoint = 0
|
|
local percent = 1
|
|
VWRLastPart = part
|
|
local dir, dirc = FindSurface(part, pos)
|
|
towall = -dir
|
|
dir = (CFrame.new(NV, -dir) * CFrame.Angles(math.pi/2,0,0)).lookVector
|
|
--[[
|
|
local p = P:Clone()
|
|
p.Parent = char
|
|
p.Size = Vector3.new(2,2,2)
|
|
p.BrickColor = BrickColor.new("Lime green")
|
|
p.CanCollide = false
|
|
p.CFrame = part.CFrame * CFrame.new(dirc*5)
|
|
p.Transparency = 0.3
|
|
]]
|
|
local bv = Instance.new("BodyVelocity", Torsoz)
|
|
bv.Name = "StaminaBodyObject"
|
|
bv.maxForce = Vector3.new(1/0,1/0,1/0)
|
|
bv.P = 9000
|
|
bv.velocity = (dir*(sprint-1))*percent
|
|
|
|
local bg = Instance.new("BodyGyro", Torsoz)
|
|
bg.Name = "StaminaBodyObject"
|
|
bg.maxTorque = Vector3.new(1/0,1/0,1/0)
|
|
bg.D = 100
|
|
local posi = pos + (-towall*1.8)
|
|
bg.cframe = CFrame.new(posi, posi+towall) * CFrame.Angles((math.pi/5),0,0)
|
|
Torsoz.CFrame = CFrame.new(posi, posi+towall) * CFrame.Angles((math.pi/5),0,0)
|
|
|
|
local joint1 = Joint3
|
|
SetWeld(joint1,1,1, NV,NV, Vector3.new(1.4,0.45,-0.1), Vector3.new(-math.pi/3.2,0,math.pi/8))
|
|
|
|
local joint2 = Joint4
|
|
SetWeld(joint2,1,1, NV,NV, Vector3.new(-1.4,0.45,-0.1), Vector3.new(-math.pi/3.2,0,-math.pi/8))
|
|
|
|
local joint3 = Joint1
|
|
SetWeld(joint3,1,1, NV,NV, Vector3.new(0.48,-0.6,-0.1), Vector3.new(0,math.pi/2,0))
|
|
joint3.C1 = CFrame.new(0,0.7,0.2) * CFrame.Angles(0,math.pi/2,0)
|
|
|
|
local joint4 = Joint2
|
|
SetWeld(joint4,1,1, NV,NV, Vector3.new(-0.48,-0.6,-0.1), Vector3.new(0,math.pi/2,0))
|
|
joint4.C1 = CFrame.new(0,0.7,0.2) * CFrame.Angles(0,math.pi/2,0)
|
|
|
|
local joint5 = Joint5
|
|
SetWeld(joint5,1,1, NV,NV, Vector3.new(0,1,0), Vector3.new(math.pi/20,0,0))
|
|
|
|
local aniangle = 0
|
|
local aniplus = true
|
|
|
|
while VWallRunning == true do
|
|
local hitz, enz = RAY(Torsoz.Position, towall*2.1)
|
|
local hitz2, enz2 = RAY(Torsoz.Position, (CFrame.new(NV,towall)*CFrame.Angles(math.pi/2,0,0)).lookVector*2.4)
|
|
|
|
if aniangle > math.pi then
|
|
aniplus = false
|
|
elseif aniangle < -math.pi then
|
|
aniplus = true
|
|
end
|
|
if aniplus == true then
|
|
aniangle = aniangle + (1.3*(percent+0.2))
|
|
elseif aniplus == false then
|
|
aniangle = aniangle - (1.3*(percent+0.2))
|
|
end
|
|
|
|
bv.velocity = (dir*(sprint-1))*percent
|
|
if VWRLeft == true then
|
|
bv.velocity = bv.velocity + ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * (11*percent+5))
|
|
end
|
|
if VWRRight == true then
|
|
bv.velocity = bv.velocity - ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * (11*percent+5))
|
|
end
|
|
|
|
bg.cframe = CFrame.new(posi, posi+towall) * CFrame.Angles((math.pi/5),0,0) * CFrame.Angles(0,aniangle/60,0)
|
|
|
|
SetWeld(joint1,1,1, NV,NV, Vector3.new(1.4,0.45,-0.1), Vector3.new(-math.pi/3.2,aniangle/52,(math.pi/8)+(aniangle/30)))
|
|
SetWeld(joint2,1,1, NV,NV, Vector3.new(-1.4,0.45,-0.1), Vector3.new(-math.pi/3.2,aniangle/52,(-math.pi/8)+(-aniangle/30)))
|
|
SetWeld(joint3,1,1, NV,NV, Vector3.new(0.51,-0.75,-(aniangle/30)), Vector3.new(0,math.pi/2,(aniangle/8)-0.3))
|
|
SetWeld(joint4,1,1, NV,NV, Vector3.new(-0.51,-0.75,(aniangle/30)), Vector3.new(0,math.pi/2,(-aniangle/8)-0.3))
|
|
|
|
if hitz == nil then
|
|
local lv = Torsoz.Position + (Torsoz.CFrame.lookVector*100)
|
|
Torsoz.CFrame = CFrame.new(Torsoz.Position, Vector3.new(lv.x,Torsoz.Position.y,lv.z))
|
|
break
|
|
end
|
|
|
|
if hitz2 ~= nil then
|
|
percent = 0
|
|
VWallRunning = "Falling"
|
|
Action = "VWRFalling"
|
|
GravPoint = -7
|
|
break
|
|
end
|
|
|
|
wait(0.02)
|
|
percent = percent - 0.028
|
|
if percent <= 0.15 then
|
|
VWallRunning = "Falling"
|
|
Action = "VWRFalling"
|
|
end
|
|
end
|
|
|
|
-------------------------- Falling from VWR ------------------------------
|
|
if VWallRunning == "Falling" then
|
|
GravPoint = GravPoint - 1
|
|
local dirpos = (-towall *5) + Vector3.new(0,GravPoint,0)
|
|
bv.velocity = CFrame.new(NV, dirpos).lookVector * dirpos.magnitude
|
|
|
|
local j1,j1a = GetWeld(joint1)
|
|
local j2,j2a = GetWeld(joint2)
|
|
local j3,j3a = GetWeld(joint3)
|
|
local j4,j4a = GetWeld(joint4)
|
|
local j5,j5a = GetWeld(joint5)
|
|
|
|
local counter = 0
|
|
while VWallRunning == "Falling" do
|
|
counter = counter + 1
|
|
local hitz, enz = RAY(H.Position, Vector3.new(0,-2.4,0))
|
|
|
|
dirpos = (-towall *5) + Vector3.new(0,GravPoint,0)
|
|
bv.velocity = CFrame.new(NV, dirpos).lookVector * dirpos.magnitude
|
|
if VWRLeft == true then
|
|
bv.velocity = bv.velocity + ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * 9)
|
|
end
|
|
if VWRRight == true then
|
|
bv.velocity = bv.velocity - ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * 9)
|
|
end
|
|
bg.cframe = CFrame.new(NV, (-towall*30) + Vector3.new(0,GravPoint,0)) * CFrame.Angles(-math.pi/2.55,math.pi,0)
|
|
|
|
if counter <= 35 then
|
|
SetWeld(joint1,counter,35, j1,j1a, Vector3.new(1.4,0.45,-0.1), Vector3.new(math.pi/9,0,math.pi/9))
|
|
SetWeld(joint2,counter,35, j2,j2a, Vector3.new(-1.4,0.45,-0.1), Vector3.new(math.pi/9,0,-math.pi/9))
|
|
SetWeld(joint3,counter,35, j3,j3a, Vector3.new(0.5,-0.75,0), Vector3.new(0,math.pi/2,math.pi/9))
|
|
joint3.C1 = CFrame.new(0,0.7 + (0.3/35*counter),0.2 - (0.2/35*counter)) * CFrame.Angles(0,math.pi/2,0)
|
|
SetWeld(joint4,counter,35, j4,j4a, Vector3.new(-0.5,-0.75,0), Vector3.new(0,math.pi/2,math.pi/9))
|
|
joint4.C1 = CFrame.new(0,0.7 + (0.3/35*counter),0.2 - (0.2/35*counter)) * CFrame.Angles(0,math.pi/2,0)
|
|
SetWeld(joint5,counter,35, j5,j5a, Vector3.new(0,1,0), Vector3.new(-math.pi/6,0,0))
|
|
end
|
|
|
|
if hitz ~= nil then
|
|
bv:remove()
|
|
Torsoz.CFrame = CFrame.new(enz+Vector3.new(0,2,0), (enz+Vector3.new(0,2,0)) + ((-towall*25) + Vector3.new(0,GravPoint,0))) * CFrame.Angles(-math.pi/2.55,math.pi,0)
|
|
Torsoz.Velocity = NV
|
|
Torsoz.RotVelocity = NV
|
|
local bp = Instance.new("BodyPosition", Torsoz)
|
|
bp.maxForce = Vector3.new(1/0,1/0,1/0)
|
|
bp.position = Torsoz.CFrame.p
|
|
game:service("Debris"):AddItem(bp, 0.16)
|
|
flow.Value = 0
|
|
break
|
|
end
|
|
|
|
if GravPoint > - 180 then
|
|
GravPoint = GravPoint - 1.9
|
|
end
|
|
if counter > 200 then
|
|
break
|
|
end
|
|
wait(0.02)
|
|
end
|
|
|
|
local bp = Instance.new("BodyPosition")
|
|
|
|
local counter2 = counter
|
|
local bgangleplus = 0
|
|
|
|
local j1,j1a = GetWeld(joint1)
|
|
local j2,j2a = GetWeld(joint2)
|
|
local j3,j3a = GetWeld(joint3)
|
|
local j4,j4a = GetWeld(joint4)
|
|
local j5,j5a = GetWeld(joint5)
|
|
|
|
local landingpos
|
|
|
|
while VWallRunning == "BackflipFromFall" do
|
|
counter2 = counter2 + 1
|
|
local hitz, enz = RAY(H.Position+Vector3.new(0,2,0), Vector3.new(0,-4.4,0))
|
|
|
|
if counter2 - counter < 13 then
|
|
bgangleplus = bgangleplus - ((math.pi*1.1)/13)
|
|
end
|
|
if counter2 - counter <= 13 then
|
|
SetWeld(joint1,counter2-counter,13, j1,j1a, Vector3.new(1.4,0.5,0.1), Vector3.new(math.pi/2,0.1,math.pi/2))
|
|
SetWeld(joint2,counter2-counter,13, j2,j2a, Vector3.new(-1.4,0.5,0.1), Vector3.new(math.pi/2,-0.1,-math.pi/2))
|
|
SetWeld(joint3,counter2-counter,13, j3,j3a, Vector3.new(0.52,-0.3,-0.65), Vector3.new(0,math.pi/2,0))
|
|
SetWeld(joint4,counter2-counter,13, j4,j4a, Vector3.new(-0.51,-0.9,-0.05), Vector3.new(0,math.pi/2,0))
|
|
SetWeld(joint5,counter2-counter,13, j5,j5a, Vector3.new(0,0.9,0), Vector3.new(-math.pi/7,0,0))
|
|
end
|
|
|
|
dirpos = (-towall *5) + Vector3.new(0,GravPoint,0)
|
|
--bv.velocity = Vector3.new(0,-2,0)
|
|
bv.velocity = CFrame.new(NV, dirpos).lookVector * dirpos.magnitude
|
|
if VWRLeft == true then
|
|
bv.velocity = bv.velocity + ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * 9)
|
|
end
|
|
if VWRRight == true then
|
|
bv.velocity = bv.velocity - ((CFrame.new(NV, towall) * CFrame.Angles(0,math.pi/2,0)).lookVector * 9)
|
|
end
|
|
bg.cframe = CFrame.new(NV, (-towall*30) + Vector3.new(0,GravPoint,0)) * CFrame.Angles((-math.pi/2.4) + bgangleplus,math.pi,0)
|
|
|
|
if hitz ~= nil then
|
|
bv:remove()
|
|
landingpos = enz - (towall*1.3)
|
|
if counter2 - counter > 8 then
|
|
bp = Instance.new("BodyPosition", Torsoz)
|
|
bp.maxForce = Vector3.new(1/0,1/0,1/0)
|
|
bp.position = enz+Vector3.new(0,2.4,0) + (-towall*1)
|
|
VWallRunning = "LandingFall"
|
|
else
|
|
Torsoz.CFrame = bg.cframe + (enz+Vector3.new(0,2.3,0))
|
|
Torsoz.Velocity = NV
|
|
Torsoz.RotVelocity = NV
|
|
local bp = Instance.new("BodyPosition", Torsoz)
|
|
bp.maxForce = Vector3.new(1/0,1/0,1/0)
|
|
bp.position = Torsoz.CFrame.p
|
|
game:service("Debris"):AddItem(bp, 0.14)
|
|
flow.Value = 0
|
|
end
|
|
break
|
|
end
|
|
|
|
if GravPoint > - 180 then
|
|
GravPoint = GravPoint - 1.9
|
|
end
|
|
if counter2 > 200 then
|
|
break
|
|
end
|
|
wait(0.02)
|
|
end
|
|
|
|
if VWallRunning == "LandingFall" then
|
|
print("Landing")
|
|
|
|
joint3.C1 = CFrame.new(0,1,0) * CFrame.Angles(0,math.pi/2,0)
|
|
joint4.C1 = CFrame.new(0,1,0) * CFrame.Angles(0,math.pi/2,0)
|
|
local j1,j1a = GetWeld(joint1)
|
|
local j2,j2a = GetWeld(joint2)
|
|
local j3,j3a = GetWeld(joint3)
|
|
local j4,j4a = GetWeld(joint4)
|
|
local j5,j5a = GetWeld(joint5)
|
|
|
|
local a
|
|
local mesh
|
|
if GravPoint < -70 then
|
|
a = P:Clone()
|
|
a.Parent = Torsoz
|
|
a.Name = "AirLandingEffect"
|
|
a.BrickColor = BrickColor.new("Medium stone grey")
|
|
a.Transparency = 0.3
|
|
a.CFrame = CFrame.new(landingpos+Vector3.new(0,0.4,0))
|
|
mesh = Instance.new("SpecialMesh", a)
|
|
mesh.MeshId = "http://www.roblox.com/asset/?id=20329976"
|
|
mesh.Scale = Vector3.new(0,0,0)
|
|
end
|
|
|
|
local bgcf = CFrame.new(NV, Vector3.new(towall.x,0,towall.z))
|
|
bg.cframe = bgcf * CFrame.Angles(-math.pi/7,0,0)
|
|
local bgval = math.pi/7/2
|
|
|
|
for i = 1, 6 do
|
|
Hu.PlatformStand = true
|
|
SetWeld(joint1,i,6, j1,j1a, Vector3.new(1.2,0.5,0.2), Vector3.new(math.pi/2,0.5,math.pi/1.2))
|
|
SetWeld(joint2,i,6, j2,j2a, Vector3.new(-1.2,0.5,0.2), Vector3.new(math.pi/2,-0.5,-math.pi/1.2))
|
|
SetWeld(joint3,i,6, j3,j3a, Vector3.new(0.51,-0.3,-0.8), Vector3.new(0,math.pi/2,-math.pi/7))
|
|
SetWeld(joint4,i,6, j4,j4a, Vector3.new(-0.51,-0.8,-0.7), Vector3.new(0,math.pi/2,-math.pi/3))
|
|
SetWeld(joint5,i,6, j5,j5a, Vector3.new(0,0.85,0), Vector3.new(-math.pi/8,0,0))
|
|
bp.position = bp.position + Vector3.new(0,-0.07,0)
|
|
bg.cframe = bgcf * CFrame.Angles((-bgval*2) + (bgval/6*i),0,0)
|
|
Torsoz.CFrame = bg.cframe + bp.position
|
|
if a ~= nil then
|
|
mesh.Scale = mesh.Scale + Vector3.new(1.3,0.35,1.3)
|
|
a.Transparency = 0.3 + (0.7/6*i)
|
|
end
|
|
wait(0.02)
|
|
end
|
|
if a ~= nil then
|
|
a:remove()
|
|
end
|
|
local j1,j1a = GetWeld(joint1)
|
|
local j2,j2a = GetWeld(joint2)
|
|
local j3,j3a = GetWeld(joint3)
|
|
local j4,j4a = GetWeld(joint4)
|
|
local j5,j5a = GetWeld(joint5)
|
|
for i = 1, 6 do
|
|
Hu.PlatformStand = true
|
|
SetWeld(joint1,i,6, j1,j1a, Vector3.new(1.5,0.5,0), Vector3.new(0,0,0))
|
|
SetWeld(joint2,i,6, j2,j2a, Vector3.new(-1.5,0.5,0), Vector3.new(0,0,0))
|
|
SetWeld(joint3,i,6, j3,j3a, Vector3.new(0.5,-1,0), Vector3.new(0,math.pi/2,0))
|
|
SetWeld(joint4,i,6, j4,j4a, Vector3.new(-0.5,-1,0), Vector3.new(0,math.pi/2,0))
|
|
SetWeld(joint5,i,6, j5,j5a, Vector3.new(0,1,0), Vector3.new(0,0,0))
|
|
bp.position = bp.position + Vector3.new(0,0.1,0)
|
|
bg.cframe = bgcf * CFrame.Angles(-bgval + (bgval/6*i),0,0)
|
|
Torsoz.CFrame = bg.cframe + bp.position
|
|
wait(0.02)
|
|
end
|
|
|
|
bp:remove()
|
|
end
|
|
|
|
end
|
|
|
|
bv:remove()
|
|
bg:remove()
|
|
VWallRunning = false
|
|
Stand()
|
|
end
|
|
end
|
|
|
|
function Slide(pos)
|
|
flow.Value = flow.Value + 6
|
|
Action = "Sliding"
|
|
Sliding = true
|
|
GravPoint = Torsoz.Velocity.y
|
|
local spd = Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude + 10
|
|
local dir = Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).unit
|
|
|
|
local bv = Instance.new("BodyVelocity", Torsoz)
|
|
bv.maxForce = Vector3.new(1/0,1/0,1/0)
|
|
bv.velocity = dir*spd
|
|
local bg = Instance.new("BodyGyro", Torsoz)
|
|
bg.maxTorque = Vector3.new(1/0,1/0,1/0)
|
|
bg.cframe = CFrame.new(NV, dir) * CFrame.Angles(math.pi/2.2,0.24,0)
|
|
|
|
local joint1 = Joint1
|
|
local joint2 = Joint2
|
|
local joint3 = Joint3
|
|
local joint4 = Joint4
|
|
local joint5 = Joint5
|
|
local j1,j1a = GetWeld(joint1)
|
|
local j2,j2a = GetWeld(joint2)
|
|
|
|
SetWeld(joint1,1,1, NV,NV, Vector3.new(j1.x,j1.y,j1.z), Vector3.new(j1a.x,math.pi/2,j1a.z))
|
|
joint1.C1 = CFrame.new(0,1,0) * CFrame.Angles(0,math.pi/2,0)
|
|
SetWeld(joint2,1,1, NV,NV, Vector3.new(j2.x,j2.y,j2.z), Vector3.new(j2a.x,math.pi/2,j2a.z))
|
|
joint2.C1 = CFrame.new(0,1,0) * CFrame.Angles(0,math.pi/2,0)
|
|
|
|
local j1,j1a = GetWeld(joint1)
|
|
local j2,j2a = GetWeld(joint2)
|
|
local j3,j3a = GetWeld(joint3)
|
|
local j4,j4a = GetWeld(joint4)
|
|
local j5,j5a = GetWeld(joint5)
|
|
|
|
local count = 0
|
|
local lastpos
|
|
|
|
while Sliding == true do
|
|
count = count + 1
|
|
Hu.PlatformStand = true
|
|
local hitz1, enz1 = RAY(Torsoz.Position+Vector3.new(0,0.03,0), dir *2.5)
|
|
local hitz2, enz2 = RAY(Torsoz.Position-Vector3.new(0,0.2,0), dir *2.5)
|
|
local ghitz, genz = RAY(Torsoz.Position, Vector3.new(0,-2.6,0))
|
|
bv.velocity = dir*spd + Vector3.new(0,GravPoint,0)
|
|
|
|
if count <= 5 then
|
|
SetWeld(joint1,count,5, j1,j1a, Vector3.new(0.5,-0.8,-0.15), Vector3.new(0,(math.pi/2)+0.1,-0.4))
|
|
SetWeld(joint2,count,5, j2,j2a, Vector3.new(-0.5,-1,0), Vector3.new(0,(math.pi/2)-0.4,0))
|
|
SetWeld(joint3,count,5, j3,j3a, Vector3.new(1.5,0.5,0), Vector3.new(-0.7,-0.24,math.pi/5))
|
|
SetWeld(joint4,count,5, j4,j4a, Vector3.new(-1.5,0.5,0), Vector3.new(-0.1,0,-math.pi/1.5))
|
|
SetWeld(joint5,count,5, j5,j5a, Vector3.new(0,1,0), Vector3.new(-0.5,-0.2,0))
|
|
end
|
|
|
|
if (hitz1 ~= nil and hitz1.CanCollide == true) or (hitz2 ~= nil and hitz2.CanCollide == true) then
|
|
bv:remove()
|
|
bg:remove()
|
|
Sliding = "HitObject"
|
|
end
|
|
if ghitz ~= nil then
|
|
GravPoint = 0
|
|
Torsoz.CFrame = CFrame.new(genz, genz+dir) * CFrame.Angles(math.pi/2.2,0.24,0) + Vector3.new(0,0.7,0)
|
|
spd = spd - 0.95
|
|
else
|
|
if GravPoint > -180 then
|
|
GravPoint = GravPoint - 5.6
|
|
end
|
|
spd = spd - 0.36
|
|
end
|
|
if spd < 7 then
|
|
Sliding = false
|
|
end
|
|
wait(0.02)
|
|
end
|
|
|
|
if Sliding == false then
|
|
local j1,j1a = GetWeld(joint1)
|
|
local j2,j2a = GetWeld(joint2)
|
|
local j3,j3a = GetWeld(joint3)
|
|
local j4,j4a = GetWeld(joint4)
|
|
local j5,j5a = GetWeld(joint5)
|
|
for i = 1, 4 do
|
|
SetWeld(joint1,i,4, j1,j1a, Vector3.new(0.5,-1,0), Vector3.new(0,math.pi/2,0))
|
|
SetWeld(joint2,i,4, j2,j2a, Vector3.new(-0.5,-1,0), Vector3.new(0,math.pi/2,0))
|
|
SetWeld(joint3,i,4, j3,j3a, Vector3.new(1.5,0.5,0), NV)
|
|
SetWeld(joint4,i,4, j4,j4a, Vector3.new(-1.5,0.5,0), NV)
|
|
SetWeld(joint5,i,4, j5,j5a, Vector3.new(0,1,0), NV)
|
|
local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-2.6,0))
|
|
bg.cframe = CFrame.new(NV, dir) * CFrame.Angles((math.pi/2.2) - ((math.pi/2.2)/4*i),0.24 - (0.24/4*i),0)
|
|
bv.velocity = dir*spd + Vector3.new(0,GravPoint,0)
|
|
|
|
if hitz ~= nil then
|
|
GravPoint = 0
|
|
Torsoz.CFrame = CFrame.new(enz, enz+dir) * CFrame.Angles((math.pi/2.2) - ((math.pi/2.2)/4*i),0.24 - (0.24/4*i),0) + Vector3.new(0,0.7+(1.8/4*i),0)
|
|
spd = spd - 0.95
|
|
else
|
|
if GravPoint > -180 then
|
|
GravPoint = GravPoint - 5.6
|
|
end
|
|
spd = spd - 0.36
|
|
end
|
|
wait(0.02)
|
|
end
|
|
local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-2.6,0))
|
|
Torsoz.CFrame = CFrame.new(enz, enz+dir) + Vector3.new(0,3,0)
|
|
end
|
|
bv:remove()
|
|
bg:remove()
|
|
SlideCooldown = 10
|
|
Stand()
|
|
end
|
|
|
|
function KD(key)
|
|
if pause.Value == false then
|
|
if key == string.char(32) then
|
|
Space = true
|
|
|
|
local ghitz, genz = RAY(Torsoz.Position, Vector3.new(0,-3.7,0))
|
|
local hitz, enz = RAY(Torsoz.Position+Vector3.new(0,1.1,0), Torsoz.CFrame.lookVector*2.3)
|
|
local righthitz, rightenz
|
|
local lefthitz, leftenz
|
|
|
|
if HWallRunning == false then
|
|
righthitz, rightenz = RAY(Torsoz.Position, ((Torsoz.CFrame * CFrame.new(1.5,0,-0.2)).p - Torsoz.CFrame.p).unit*3.9)
|
|
lefthitz, leftenz = RAY(Torsoz.Position, ((Torsoz.CFrame * CFrame.new(-1.5,0,-0.2)).p - Torsoz.CFrame.p).unit*3.9)
|
|
|
|
elseif HWallRunning == "Jumping" then
|
|
righthitz, rightenz = RAY(Torsoz.Position, ((CFrame.new(Torsoz.Position, Torsoz.Position + HWRDir) * CFrame.new(1.5,0,-0.2)).p - Torsoz.Position).unit*3.9)
|
|
lefthitz, leftenz = RAY(Torsoz.Position, ((CFrame.new(Torsoz.Position, Torsoz.Position + HWRDir) * CFrame.new(-1.5,0,-0.2)).p - Torsoz.Position).unit*3.9)
|
|
|
|
end
|
|
|
|
if Action == "Standing" and Shift == true and (hitz == nil or hitz.CanCollide == false) and (righthitz == nil or righthitz.CanCollide == false) and (lefthitz == nil or lefthitz.CanCollide == false) and (ghitz == nil or ghitz.CanCollide == false) and (Torsoz.Velocity.y > 6 and Torsoz.Velocity.y < 50) and DivingCooldown <= 0 then
|
|
if stamina >= 10 then
|
|
--if Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude > 12 then
|
|
Dive()
|
|
--end
|
|
end
|
|
end
|
|
|
|
if hitz == nil and VWallRunning == "Falling" then
|
|
VWallRunning = "BackflipFromFall"
|
|
end
|
|
|
|
if Shift == true and Torsoz.Velocity.y > -50 and Diving == false and DivingCooldown <= 0 then
|
|
local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-3.5,0))
|
|
|
|
if hitz ~= nil then
|
|
if Action == "Standing" and VWRCooldown == 0 then
|
|
if hitz2 == nil or hitz2.CanCollide == false then
|
|
VWR(hitz, enz)
|
|
end
|
|
end
|
|
end
|
|
|
|
if (HWallRunning == false or (HWallRunning == "Jumping" and (HWRLastPart ~= righthitz or HWRLastPart ~= lefthitz))) and HWRCooldown == 0 and VWallRunning == false then
|
|
|
|
if (hitz == nil or HWallRunning == "Jumping") and ((righthitz ~= nil and righthitz.Parent:findFirstChild("Humanoid") == nil and righthitz.Parent.className ~= "Hat") or (lefthitz ~= nil and lefthitz.Parent:findFirstChild("Humanoid") == nil and lefthitz.Parent.className ~= "Hat")) then
|
|
if hitz2 == nil or hitz2.CanCollide == false then
|
|
local right = (rightenz - Torsoz.Position).magnitude
|
|
local left = (leftenz - Torsoz.Position).magnitude
|
|
if right < left then
|
|
if HWallRunning == "Jumping" and HWRLastPart ~= righthitz then
|
|
HWallRunning = false
|
|
while Standing == false do
|
|
wait(0.01)
|
|
end
|
|
print("2nd Right Activated!")
|
|
HWallRun(righthitz, rightenz, -math.pi/2)
|
|
else
|
|
if hitz == nil then
|
|
print("Right Activated")
|
|
HWallRun(righthitz, rightenz, -math.pi/2)
|
|
end
|
|
end
|
|
elseif left < right then
|
|
if HWallRunning == "Jumping" and HWRLastPart ~= lefthitz then
|
|
HWallRunning = false
|
|
while Standing == false do
|
|
wait(0.01)
|
|
end
|
|
print("2nd Left Activated!")
|
|
HWallRun(lefthitz, leftenz, math.pi/2)
|
|
else
|
|
if hitz == nil then
|
|
print("Left Activated")
|
|
HWallRun(lefthitz, leftenz, math.pi/2)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
if HWallRunning == true then
|
|
HWallRunning = "Jumping"
|
|
Action = "HWRJumping"
|
|
end
|
|
|
|
elseif key == string.char(48) then
|
|
Shift = true
|
|
elseif key == string.char(50) then
|
|
if Action == "Standing" then
|
|
Sit()
|
|
elseif HWallRunning == true then
|
|
HWRGravDrop = true
|
|
end
|
|
elseif key == string.char(52) then
|
|
if Shift == true and Action == "Standing" and SlideCooldown == 0 and Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude > 15 and Torsoz.Velocity.y > -40 then
|
|
print("Sliding")
|
|
Slide()
|
|
end
|
|
elseif key == "a" then
|
|
VWRLeft = true
|
|
elseif key == "d" then
|
|
VWRRight = true
|
|
end
|
|
end
|
|
end
|
|
|
|
function KU(key)
|
|
if key == string.char(32) then
|
|
Space = false
|
|
elseif key == string.char(48) then
|
|
Shift = false
|
|
elseif key == string.char(50) then
|
|
if Action == "Sitting" then
|
|
Stand()
|
|
end
|
|
elseif key == string.char(52) then
|
|
Sliding = false
|
|
elseif key == "a" then
|
|
VWRLeft = false
|
|
elseif key == "d" then
|
|
VWRRight = false
|
|
end
|
|
end
|
|
|
|
mouse.KeyDown:connect(function(key) KD(key) end)
|
|
mouse.KeyUp:connect(function(key) KU(key) end)
|
|
|
|
Joint1 = Instance.new("Snap", Torsoz)
|
|
GetWeld(Joint1)
|
|
Joint2 = Instance.new("Snap", Torsoz)
|
|
GetWeld(Joint2)
|
|
Joint3 = Instance.new("Snap", Torsoz)
|
|
GetWeld(Joint3)
|
|
Joint4 = Instance.new("Snap", Torsoz)
|
|
GetWeld(Joint4)
|
|
Joint5 = Instance.new("Snap", Torsoz)
|
|
GetWeld(Joint5)
|
|
Stand()
|
|
|
|
local animatebg = Instance.new("BodyGyro")
|
|
animatebg.D = 100
|
|
local GravAction = "Idle"
|
|
local PrevGravAction = GravAction
|
|
|
|
local prevrapos = (RA.CFrame * CFrame.new(0,-1,0)).p
|
|
local prevlapos = (LA.CFrame * CFrame.new(0,-1,0)).p
|
|
local hue = 0
|
|
local recyclecount = 0
|
|
local tickoffset = tick()
|
|
local fadetab = {}
|
|
local fadetab2 = {}
|
|
local animatebgcount = 0
|
|
|
|
for i = 1, 13 do
|
|
local p = P:Clone()
|
|
p.Name = "Part"..i
|
|
local mesh = Instance.new("SpecialMesh", p)
|
|
mesh.MeshId = "http://www.roblox.com/Asset/?id=9856898"
|
|
mesh.TextureId = "http://www.roblox.com/Asset/?id=48358980"
|
|
table.insert(fadetab, {p, mesh})
|
|
end
|
|
for i = 1, 13 do
|
|
local p = P:Clone()
|
|
p.Name = "Part"..i
|
|
local mesh = Instance.new("SpecialMesh", p)
|
|
mesh.MeshId = "http://www.roblox.com/Asset/?id=9856898"
|
|
mesh.TextureId = "http://www.roblox.com/Asset/?id=48358980"
|
|
table.insert(fadetab2, {p, mesh})
|
|
end
|
|
|
|
game:service("RunService").Stepped:connect(function()
|
|
GravAction = "Idle"
|
|
hue = hue + 3
|
|
hue = hue % 360
|
|
|
|
------------- anim angle changing --------
|
|
if animangle > math.pi then
|
|
animplus = false
|
|
elseif animangle < -math.pi then
|
|
animplus = true
|
|
end
|
|
if animplus == true then
|
|
animangle = animangle + animspeed
|
|
elseif animplus == false then
|
|
animangle = animangle - animspeed
|
|
end
|
|
|
|
local hitz, enz = RAY(Torsoz.Position, Vector3.new(0,-3.9,0))
|
|
if Shift == true then
|
|
Hu.WalkSpeed = sprint
|
|
else
|
|
Hu.WalkSpeed = 16
|
|
end
|
|
if (FOV >= 70 and FOV < 74) and Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude > 25 then
|
|
FOV = FOV + 1
|
|
elseif (FOV <= 74 and FOV > 70) and Vector3.new(Torsoz.Velocity.x,0,Torsoz.Velocity.z).magnitude < 20 then
|
|
FOV = FOV - 1
|
|
end
|
|
if pause.Value == true then
|
|
Hu.WalkSpeed = 0
|
|
end
|
|
if Sitting == true then
|
|
local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-2.2,0))
|
|
Hu.PlatformStand = true
|
|
if hitz2 == nil then
|
|
Stand()
|
|
end
|
|
end
|
|
if Diving == true then
|
|
Hu.PlatformStand = true
|
|
DivingBV.velocity = Vector3.new(DivingDir.x*(sprint+2),GravPoint,DivingDir.z*(sprint+2))
|
|
DivingBG.cframe = CFrame.new(Torsoz.Position, Torsoz.Position+DivingBV.velocity) * CFrame.Angles(-math.pi/2,0,0)
|
|
|
|
if GravPoint > -180 then
|
|
GravPoint = GravPoint - 2
|
|
end
|
|
end
|
|
if DivingCooldown > 0 then
|
|
DivingCooldown = DivingCooldown - 1
|
|
end
|
|
if HWallRunning == true then
|
|
if HWRGravDrop == false then
|
|
GravPoint = GravPoint - 0.4
|
|
else
|
|
GravPoint = GravPoint - 2
|
|
end
|
|
elseif HWallRunning == "Jumping" then
|
|
GravPoint = GravPoint - 1.7
|
|
end
|
|
----------------------------- stamina ----------------------------------------
|
|
if Vector3.new(Torsoz.Velocity.x, 0, Torsoz.Velocity.z).magnitude > 18 and Action == "Standing" and Shift == true then
|
|
if stamina > 0 then
|
|
stamina = stamina - 0.5
|
|
if stamina < 0 then
|
|
Shift = false
|
|
stamina = 0
|
|
end
|
|
else
|
|
Shift = false
|
|
stamina = 0
|
|
end
|
|
if Action == "Standing" then
|
|
animspeed = 0.85
|
|
SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.5,-1,0), Vector3.new(-animangle/4.85,0,0))
|
|
SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.5,-1,0), Vector3.new(animangle/4.85,0,0))
|
|
SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new(animangle/3.5,0,0))
|
|
SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new(-animangle/3.5,0,0))
|
|
end
|
|
elseif Vector3.new(Torsoz.Velocity.x, 0, Torsoz.Velocity.z).magnitude > 12 and Action ~= "Sliding" then
|
|
if stamina < maxstamina then
|
|
stamina = stamina + 0.5
|
|
if stamina > maxstamina then
|
|
stamina = maxstamina
|
|
end
|
|
else
|
|
stamina = maxstamina
|
|
end
|
|
if Action == "Standing" then
|
|
animspeed = 0.65
|
|
SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.5,-1,0), Vector3.new(-animangle/7,0,0))
|
|
SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.5,-1,0), Vector3.new(animangle/7,0,0))
|
|
SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new(animangle/5,0,0))
|
|
SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new(-animangle/5,0,0))
|
|
end
|
|
elseif Vector3.new(Torsoz.Velocity.x, 0, Torsoz.Velocity.z).magnitude < 2 then
|
|
animspeed = 0.1
|
|
if Action == "Standing" then
|
|
SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.5,-1,0), Vector3.new(-animangle/38,0,0))
|
|
SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.5,-1,0), Vector3.new(animangle/38,0,0))
|
|
SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new(animangle/30,0,0))
|
|
SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new(-animangle/30,0,0))
|
|
end
|
|
if stamina < maxstamina then
|
|
if Sitting == false then
|
|
stamina = stamina + 0.65
|
|
else
|
|
stamina = stamina + 1.02
|
|
end
|
|
if stamina > maxstamina then
|
|
stamina = maxstamina
|
|
end
|
|
else
|
|
stamina = maxstamina
|
|
end
|
|
end
|
|
|
|
if hitz == nil then
|
|
if Torsoz.Velocity.y > 1 or (Torsoz.Velocity.y < -1 and Torsoz.Velocity.y > -90) then
|
|
if Action == "Standing" then
|
|
GravAction = "Rising"
|
|
animspeed = 0.1
|
|
SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.5,-1,0), Vector3.new(-animangle/38,0,0))
|
|
SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.5,-1,0), Vector3.new(animangle/38,0,0))
|
|
SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.5,0.5,0), Vector3.new((math.pi-0.2)+(animangle/30),0,0))
|
|
SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.5,0.5,0), Vector3.new((math.pi-0.2)+(-animangle/30),0,0))
|
|
if animatebg.Parent ~= nil then
|
|
animatebg.Parent = Torsoz
|
|
animatebg.maxTorque = Vector3.new(1/0,10000,1/0)
|
|
local lokvec = Torsoz.CFrame.lookVector*100
|
|
animatebg.cframe = CFrame.new(NV, Vector3.new(lokvec.x,0,lokvec.z))
|
|
animatebg.Parent = nil
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if hitz == nil then
|
|
local hitz2, enz2 = RAY(Torsoz.Position, Vector3.new(0,-6,0))
|
|
if hitz2 == nil then
|
|
if Torsoz.Velocity.y < -90 then
|
|
if Action == "Standing" then
|
|
GravAction = "Falling"
|
|
animspeed = 1.1
|
|
animatebg.Parent = Torsoz
|
|
animatebg.maxTorque = Vector3.new(1/0,10000,1/0)
|
|
local lokvec = Torsoz.CFrame.lookVector*100
|
|
animatebg.cframe = CFrame.new(NV, Vector3.new(lokvec.x,0,lokvec.z)) * CFrame.Angles(-math.pi/11,animangle/70,0)
|
|
SetWeld(Joint1,1,1, NV,NV, Vector3.new(0.45,-0.8,0), Vector3.new((animangle/27)-0.3,0,0.18))
|
|
SetWeld(Joint2,1,1, NV,NV, Vector3.new(-0.45,-0.8,0), Vector3.new((-animangle/27)-0.3,0,-0.18))
|
|
SetWeld(Joint3,1,1, NV,NV, Vector3.new(1.4,0.5,0), Vector3.new((math.pi+0.2)+(animangle/26),0,0.18))
|
|
SetWeld(Joint4,1,1, NV,NV, Vector3.new(-1.4,0.5,0), Vector3.new((math.pi+0.2)+(-animangle/26),0,-0.18))
|
|
end
|
|
end
|
|
elseif hitz2.CanCollide == true then
|
|
if animatebg.Parent ~= nil then
|
|
animatebg.Parent = Torsoz
|
|
animatebg.maxTorque = Vector3.new(1/0,10000,1/0)
|
|
local lokvec = Torsoz.CFrame.lookVector*100
|
|
animatebg.cframe = CFrame.new(NV, Vector3.new(lokvec.x,0,lokvec.z))
|
|
animatebg.Parent = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
if GravAction == "Idle" and animatebg.Parent ~= nil then
|
|
animatebg.Parent = nil
|
|
end
|
|
|
|
if math.abs(tickoffset - tick()) > 0.05 then
|
|
tickoffset = tick()
|
|
local flowcolor = HSV(hue, 0.7,1)
|
|
recyclecount = (recyclecount % #fadetab) + 1
|
|
if flow.Value > 25 then
|
|
local lapos = (LA.CFrame * CFrame.new(0,-1,0)).p
|
|
local rapos = (RA.CFrame * CFrame.new(0,-1,0)).p
|
|
local p = fadetab[recyclecount]
|
|
p[1].Parent = m
|
|
p[1].CFrame = CFrame.new((lapos+prevlapos)/2, lapos)
|
|
p[2].Scale = Vector3.new(0.5,0.5,(lapos-prevlapos).magnitude*2)
|
|
p[2].VertexColor = Vector3.new(flowcolor.r,flowcolor.g,flowcolor.b)
|
|
p[1].Transparency = math.abs((flow.Value/120) - 0.8)
|
|
p[1].Transparency = p[1].Transparency + (1/#fadetab)
|
|
local p = fadetab2[recyclecount]
|
|
p[1].Parent = m
|
|
p[1].CFrame = CFrame.new((rapos+prevrapos)/2, rapos)
|
|
p[2].Scale = Vector3.new(0.5,0.5,(rapos-prevrapos).magnitude*2)
|
|
p[2].VertexColor = Vector3.new(flowcolor.r,flowcolor.g,flowcolor.b)
|
|
p[1].Transparency = math.abs((flow.Value/120) - 0.8)
|
|
p[1].Transparency = p[1].Transparency + (1/#fadetab)
|
|
end
|
|
|
|
for i, v in pairs(fadetab) do
|
|
if v[1].Transparency < 0.9 then
|
|
v[1].Transparency = v[1].Transparency + (1/#fadetab)
|
|
fadetab2[i][1].Transparency = fadetab2[i][1].Transparency + (1/#fadetab)
|
|
elseif v[1].Transparency ~= 1 then
|
|
v[1].Transparency = 1
|
|
v[1].Position = Vector3.new(50000,0,0)
|
|
fadetab2[i][1].Transparency = 1
|
|
fadetab2[i][1].Position = Vector3.new(50000,0,0)
|
|
end
|
|
end
|
|
|
|
prevrapos = (RA.CFrame * CFrame.new(0,-1,0)).p
|
|
prevlapos = (LA.CFrame * CFrame.new(0,-1,0)).p
|
|
end
|
|
|
|
if flow.Value > 140 then
|
|
if char.Parent ~= nil then
|
|
char:remove()
|
|
end
|
|
end
|
|
|
|
if flowcooldown > 0 then
|
|
flowcooldown = flowcooldown - 1
|
|
end
|
|
if HWRCooldown > 0 then
|
|
HWRCooldown = HWRCooldown - 1
|
|
end
|
|
if VWRCooldown > 0 then
|
|
if hitz ~= nil and VWRCooldown > 0 then
|
|
VWRCooldown = VWRCooldown - 1
|
|
end
|
|
end
|
|
if SlideCooldown > 0 then
|
|
SlideCooldown = SlideCooldown - 1
|
|
end
|
|
|
|
if Action == "HWallRunning" or Action == "VWallRunning" then
|
|
flow.Value = flow.Value + 0.24
|
|
if flow.Value > 100 then
|
|
flow.Value = 100
|
|
end
|
|
flowcooldown = 40
|
|
elseif Action == "Diving" then
|
|
flowcooldown = 30
|
|
elseif Action == "Sliding" then
|
|
flowcooldown = 15
|
|
elseif Action == "Standing" or Action == "Sitting" then
|
|
if flow.Value > 0 and flowcooldown <= 0 then
|
|
flow.Value = flow.Value - 0.37
|
|
if flow.Value < 0 then
|
|
flow.Value = 0
|
|
end
|
|
end
|
|
end
|
|
|
|
cam.FieldOfView = FOV
|
|
prevanimbgcount = animatebgcount
|
|
sprint = defsprint + ((flow.Value/100)*2.4)
|
|
PrevGravAction = GravAction
|
|
Calculate()
|
|
end)
|