Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --[[
- patchma hub by MyWorld
- Immortality Lord edition
- required accessories:
- head:
- 17375337078 or 17270164442
- body:
- 17270178857,17270001635,17269952801,17269983359,17269998373
- wings:
- 17270231731,17270225913
- sword:
- 17326812233,17326800544
- based on patchma hub version 38
- ]]
- local osclock=os.clock
- local tspawn=task.spawn
- local twait=task.wait
- local schar=string.char
- local ssub=string.sub
- local sfind=string.find
- local supper=string.upper
- local mrandom=math.random
- local sin=math.sin
- local cos=math.cos
- local abs=math.abs
- local rad=math.rad
- local min=math.min
- local clamp=math.clamp
- local tinsert=table.insert
- local tclear=table.clear
- local tclone=table.clone
- local tfind=table.find
- local tunpack=table.unpack
- --the script doesnt have to read global varaibles every time to get them
- --why not have them saved in local varaibles for faster access times
- local next=next
- local pcall=pcall
- local xpcall=xpcall
- local type=type
- local typeof=typeof
- local game=game
- local i=Instance.new
- local v2=Vector2.new
- local v3=Vector3.new
- local c3=Color3.new
- local cf=CFrame.new
- local cfl=CFrame.lookAt
- local angles=CFrame.Angles
- local u2=UDim2.new
- local e=Enum
- local rp=RaycastParams.new
- local cs=ColorSequence.new
- local csk=ColorSequenceKeypoint.new
- local sine=osclock()
- local deltaTime=0
- local v3_0=v3(0,0,0)
- local v3_101=v3(1,0,1)
- local v3_010=v3(0,1,0)
- local v3_001=v3(0,0,1)
- local cf_0=cf(0,0,0)
- local v3_xz=v3_101*10
- local v3_xzL=v3_101*250.1
- local v3_net=v3_010*25.01
- local function rs(l)
- l=l or mrandom(8,15)
- local s=""
- for i=1,l do
- if mrandom(1,2)==1 then
- s=s..schar(mrandom(65,90))
- else
- s=s..schar(mrandom(97,122))
- end
- end
- return s
- end
- --it runs even faster if u call __index and __newindex of metatables of userdata directly
- local function getMetamethodFromErrorStack(userdata,f,test)
- local ret=nil
- xpcall(f,function()
- ret=debug.info(2,"f")
- end,userdata,nil,0)
- if (type(ret)~="function") or not test(ret) then
- return f
- end
- return ret
- end
- local insSet=getMetamethodFromErrorStack(game,function(a,b,c) a[b]=c end,function(f) local a=i("Folder") local b=rs() f(a,"Name",b) return a.Name==b end)
- local insGet=getMetamethodFromErrorStack(game,function(a,b) return a[b] end,function(f) local a=i("Folder") local b=rs() a.Name=b return f(a,"Name")==b end)
- local cfGet=getMetamethodFromErrorStack(cf_0,function(a,b) return a[b] end,function(f) return f(cf(1,2,3),"Position")==v3(1,2,3) end)
- local cfMul=getMetamethodFromErrorStack(cf_0,function(a,b) return a*b end,function(f) return angles(1,2,3)*angles(1,2,3)==f(angles(1,2,3),angles(1,2,3)) end)
- local cfAdd=getMetamethodFromErrorStack(cf_0,function(a,b) return a+b end,function(f) return cf(1,2,3)+v3(1,2,3)==f(cf(1,2,3),v3(1,2,3)) end)
- local v3Get=getMetamethodFromErrorStack(v3_0,function(a,b) return a[b] end,function(f) return v3(1,2,3).Unit==f(v3(1,2,3),"Unit") end)
- --multiplying and adding vector3 is faster if you use the * and + operators
- --no need to index instances every time to call their functions
- local Clone=insGet(game,"Clone")
- local ClearAllChildren=insGet(game,"ClearAllChildren")
- local Destroy=insGet(game,"Destroy")
- local IsA=insGet(game,"IsA")
- local FindFirstChildOfClass=insGet(game,"FindFirstChildOfClass")
- local FindFirstChildWhichIsA=insGet(game,"FindFirstChildWhichIsA")
- local GetChildren=insGet(game,"GetChildren")
- local GetDescendants=insGet(game,"GetDescendants")
- local IsDescendantOf=insGet(game,"IsDescendantOf")
- local GetPropertyChangedSignal=insGet(game,"GetPropertyChangedSignal")
- --findfirstchildofclass faster than getservice
- local plrs=FindFirstChildOfClass(game,"Players")
- local rus=FindFirstChildOfClass(game,"RunService")
- local ws=FindFirstChildOfClass(game,"Workspace")
- local uis=FindFirstChildOfClass(game,"UserInputService")
- local gs=FindFirstChildOfClass(game,"GuiService")
- local lp=insGet(plrs,"LocalPlayer")
- local pg=FindFirstChildOfClass(lp,"PlayerGui")
- local mouse=insGet(lp,"GetMouse")(lp)
- local stepped=insGet(rus,"Stepped")
- local heartbeat=insGet(rus,"Heartbeat")
- local renderstepped=insGet(rus,"RenderStepped")
- local GetPlayers=insGet(plrs,"GetPlayers")
- local Raycast=insGet(ws,"Raycast")
- local Connect=heartbeat.Connect
- local Disconnect=Connect(GetPropertyChangedSignal(game,"CreatorId"),type).Disconnect
- local Wait=heartbeat.Wait
- local GetMouseLocation=insGet(uis,"GetMouseLocation")
- local GetFocusedTextBox=insGet(uis,"GetFocusedTextBox")
- local GetMouseDelta=insGet(uis,"GetMouseDelta")
- local IsMouseButtonPressed=insGet(uis,"IsMouseButtonPressed")
- local IsKeyDown=insGet(uis,"IsKeyDown")
- local Inverse=cfGet(cf_0,"Inverse")
- local Lerp=cfGet(cf_0,"Lerp")
- local guiTheme={
- guiTitle="patchma hub IL edition",
- windowTitleColor=c3(0.7,0.7,0.7),
- windowTopColor=c3(0,0,0),
- windowBottomColor=c3(0.05,0.05,0.05),
- windowMinimizedSize={X=220,Y=22},
- windowRegularSize={X=220,Y=263},
- buttonsTextColor=c3(0.560784,0.560784,0.560784),
- labelsTextColor=c3(0.3,0.3,0.3),
- listTopColor=c3(0,0,0),
- listBottomColor=c3(0.07,0.07,0.07)
- }
- local accessorylimbs={
- {meshid="17269636541",textureid="",C0=cf_0,Name="Torso"},
- {meshid="17269753087",textureid="",C0=angles(0,3.14,0),Name="Head"},
- {meshid="17375312569",textureid="",C0=cf(1.50995803e-08,-1.07200003,-0.100000001,-1,0,1.50995803e-07,0,1,0,-1.50995803e-07,0,-1),Name="Head"},
- {meshid="17269487439",textureid="",C0=angles(0,0,1.5707963267948966),Name="Left Arm"},
- {meshid="17269487439",textureid="",C0=angles(0,0,1.5707963267948966),Name="Right Arm"},
- {meshid="17269487439",textureid="",C0=angles(0,0,1.5707963267948966),Name="Left Leg"},
- {meshid="17269487439",textureid="",C0=angles(0,0,1.5707963267948966),Name="Right Leg"}
- }
- local function gp(p,n,cl)
- for i,v in next,GetChildren(p) do
- if IsA(v,cl) and (insGet(v,"Name")==n) then
- return v
- end
- end
- return nil
- end
- local function timegp(p,n,c,t)
- t=osclock()+t
- while t>osclock() do
- local r=gp(p,n,c)
- if r then
- return r
- end
- Wait(stepped)
- end
- return nil
- end
- local function getNetlessVelocity(realVel)
- --if true then return v3_0 end
- --if true then return realVel end
- --if true then return v3_net end
- if v3Get(realVel,"Magnitude")>25.01 then
- return v3Get(realVel,"Unit")*v3_xzL+v3_net
- end
- return realVel*v3_xz+v3_net
- end
- local sft=1/45
- local function getFallingTime(Ypos,destY,gravity)
- local velY=25.01
- local fallingTime=0
- gravity=gravity*sft
- while (Ypos>destY) or (velY>0) do
- fallingTime=fallingTime+sft
- velY=velY-gravity
- Ypos=Ypos+(velY*sft)
- end
- return fallingTime
- end
- local function getMeshOfPart(v)
- if IsA(v,"MeshPart") then
- return insGet(v,"MeshId"), insGet(v,"TextureID")
- elseif IsA(v,"BasePart") then
- v=FindFirstChildOfClass(v,"SpecialMesh")
- if v then
- return insGet(v,"MeshId"), insGet(v,"TextureId")
- end
- end
- return nil, nil
- end
- local function makeplaceholder(v)
- if typeof(v)~="Instance" then
- return nil
- end
- if not insGet(v,"Archivable") then
- insSet(v,"Archivable",true)
- end
- v=Clone(v)
- for i,v in next,GetChildren(v) do
- if IsA(v,"SpecialMesh") then
- insSet(v,"Name",rs())
- ClearAllChildren(v)
- else
- Destroy(v)
- end
- end
- insSet(v,"Name",rs())
- insSet(v,"Anchored",true)
- insSet(v,"CanCollide",false)
- insSet(v,"Transparency",0.25)
- insSet(v,"Parent",ws)
- return v
- end
- local function emptyfunction() end
- local i1=i("Frame")
- local i2=i("Frame")
- local i3=i("Frame")
- local i4=i("ScrollingFrame")
- local i5=i("UIListLayout")
- local i6=i("UIGradient")
- local i7=i("TextBox")
- local i8=i("TextButton")
- local i9=i("UIGradient")
- local i10=i("ScreenGui")
- insSet(i1,"AnchorPoint",v2(0.5,0))
- insSet(i1,"Active",true)
- insSet(i1,"BorderSizePixel",0)
- insSet(i1,"ClipsDescendants",true)
- insSet(i1,"Position",u2(0.5,0,0.5,guiTheme.windowRegularSize.Y/-2))
- insSet(i1,"Size",u2(0,guiTheme.windowRegularSize.X,0,guiTheme.windowRegularSize.Y))
- insSet(i1,"Name",rs())
- insSet(i1,"Parent",i10)
- insSet(i2,"BackgroundColor3",c3(1,1,1))
- insSet(i2,"BorderSizePixel",0)
- insSet(i2,"Size",u2(0,guiTheme.windowRegularSize.X,0,guiTheme.windowRegularSize.Y))
- insSet(i2,"Name",rs())
- insSet(i2,"Parent",i1)
- insSet(i3,"BackgroundColor3",c3(1,1,1))
- insSet(i3,"BorderSizePixel",0)
- insSet(i3,"Position",u2(0,5,0,guiTheme.windowMinimizedSize.Y-2))
- insSet(i3,"Size",u2(1,-10,0,guiTheme.windowRegularSize.Y-guiTheme.windowMinimizedSize.Y-3))
- insSet(i3,"Name",rs())
- insSet(i3,"Parent",i2)
- insSet(i4,"Active",true)
- insSet(i4,"BackgroundTransparency",1)
- insSet(i4,"BorderSizePixel",0)
- insSet(i4,"Size",u2(1,-3,1,0))
- insSet(i4,"AutomaticCanvasSize",e.AutomaticSize.Y)
- insSet(i4,"CanvasSize",u2(0,0,0,0))
- insSet(i4,"ScrollBarThickness",7)
- insSet(i4,"Name",rs())
- insSet(i4,"Parent",i3)
- insSet(i5,"Name",rs())
- insSet(i5,"Parent",i4)
- insSet(i5,"SortOrder",e.SortOrder.LayoutOrder)
- insSet(i6,"Name",rs())
- insSet(i6,"Parent",i3)
- insSet(i6,"Color",cs({csk(0,guiTheme.listTopColor),csk(1,guiTheme.listBottomColor)}))
- insSet(i6,"Rotation",90)
- insSet(i7,"Font",e.Font.SourceSans)
- insSet(i7,"FontSize",e.FontSize.Size18)
- insSet(i7,"ClearTextOnFocus",false)
- insSet(i7,"Text",guiTheme.guiTitle)
- insSet(i7,"TextColor3",guiTheme.windowTitleColor)
- insSet(i7,"TextSize",16)
- insSet(i7,"AnchorPoint",v2(0.5,0))
- insSet(i7,"BackgroundTransparency",1)
- insSet(i7,"Position",u2(0.5,0,0,guiTheme.windowMinimizedSize.Y/2))
- insSet(i7,"Name",rs())
- insSet(i7,"Parent",i2)
- insSet(i8,"AnchorPoint",v2(1,0))
- insSet(i8,"BackgroundTransparency",1)
- insSet(i8,"Position",u2(1,0,0,0))
- insSet(i8,"Size",u2(0,40,0,guiTheme.windowMinimizedSize.Y))
- insSet(i8,"Name",rs())
- insSet(i8,"Parent",i2)
- insSet(i8,"Font",e.Font.SourceSans)
- insSet(i8,"FontSize",e.FontSize.Size18)
- insSet(i8,"Text","-")
- insSet(i8,"TextColor3",c3(1,1,1))
- insSet(i8,"TextSize",16)
- insSet(i9,"Name",rs())
- insSet(i9,"Parent",i2)
- insSet(i9,"Color",cs({csk(0,guiTheme.windowTopColor),csk(1,guiTheme.windowBottomColor)}))
- insSet(i9,"Rotation",90)
- insSet(i10,"ZIndexBehavior",e.ZIndexBehavior.Sibling)
- insSet(i10,"IgnoreGuiInset",true)
- insSet(i10,"ResetOnSpawn",false)
- insSet(i10,"DisplayOrder",2147483647)
- insSet(i10,"Name",rs())
- local guimin=false
- local minloop=false
- local i1X=guiTheme.windowRegularSize.X
- local i1Y=guiTheme.windowRegularSize.Y
- local i1Xdest=i1X
- local i1Ydest=i1Y
- Connect(insGet(i8,"MouseButton1Click"),function()
- guimin = not guimin
- if guimin then
- i1Xdest=guiTheme.windowMinimizedSize.X
- i1Ydest=guiTheme.windowMinimizedSize.Y
- else
- i1Xdest=guiTheme.windowRegularSize.X
- i1Ydest=guiTheme.windowRegularSize.Y
- end
- if minloop then
- return
- end
- minloop=true
- insSet(i3,"Visible",true)
- sine=osclock()
- local lastsine=sine
- while true do
- sine=osclock()
- local deltaTime=(sine-lastsine)*10
- lastsine=sine
- local difX=i1Xdest-i1X
- local difY=i1Ydest-i1Y
- if (abs(difY)<=1) and (abs(difX)<=1) then
- i1X=i1Xdest
- i1Y=i1Ydest
- insSet(i1,"Size",u2(0,i1X,0,i1Y))
- break
- end
- i1X=i1X+difX*deltaTime
- i1Y=i1Y+difY*deltaTime
- insSet(i1,"Size",u2(0,i1X,0,i1Y))
- twait()
- end
- insSet(i3,"Visible",not guimin)
- minloop=false
- end)
- local function Draggable(window,obj)
- local MB1enum = e.UserInputType.MouseButton1
- local TOUCHenum = e.UserInputType.Touch
- obj = obj or window
- local activeEntered = 0
- local mouseStart = nil
- local dragStart = nil
- local inputbegancon = nil
- local rendersteppedcon = nil
- local inputendedcon = nil
- local function inputendedf(a)
- a=insGet(a,"UserInputType")
- if (a==MB1enum) or (a==TOUCHenum) then
- Disconnect(rendersteppedcon)
- Disconnect(inputendedcon)
- end
- end
- local function rendersteppedf()
- local off = GetMouseLocation(uis)-mouseStart
- insSet(window,"Position",dragStart+u2(0,off.X,0,off.Y))
- end
- local function inputbeganf(a)
- a=insGet(a,"UserInputType")
- if ((a==MB1enum) or (a==TOUCHenum)) and (activeEntered==0) and not GetFocusedTextBox(uis) then
- mouseStart=GetMouseLocation(uis)
- dragStart=insGet(window,"Position")
- if rendersteppedcon then Disconnect(rendersteppedcon) end
- rendersteppedcon = Connect(renderstepped,rendersteppedf)
- if inputendedcon then Disconnect(inputendedcon) end
- inputendedcon = Connect(insGet(uis,"InputEnded"),inputendedf)
- end
- end
- Connect(insGet(obj,"MouseEnter"),function()
- if inputbegancon then Disconnect(inputbegancon) end
- inputbegancon = Connect(insGet(uis,"InputBegan"),inputbeganf)
- end)
- Connect(insGet(obj,"MouseLeave"),function()
- Disconnect(inputbegancon)
- end)
- local function ondes(d)
- if IsA(d,"GuiObject") then
- local thisEntered = false
- local thisAdded = false
- local con0 = Connect(insGet(d,"MouseEnter"),function()
- thisEntered = true
- if (not thisAdded) and insGet(d,"Active") then
- activeEntered = activeEntered + 1
- thisAdded = true
- end
- end)
- local con1 = Connect(insGet(d,"MouseLeave"),function()
- thisEntered = false
- if thisAdded then
- activeEntered = activeEntered - 1
- thisAdded = false
- end
- end)
- local con2 = Connect(GetPropertyChangedSignal(d,"Active"),function()
- if thisEntered then
- if thisAdded and not insGet(d,"Active") then
- activeEntered = activeEntered - 1
- thisAdded = false
- elseif insGet(d,"Active") and not thisAdded then
- activeEntered = activeEntered + 1
- thisAdded = true
- end
- end
- end)
- local con3 = nil
- con3 = Connect(insGet(d,"AncestryChanged"),function()
- if not IsDescendantOf(d,window) then
- if thisEntered then
- activeEntered = activeEntered - 1
- end
- Disconnect(con0)
- Disconnect(con1)
- Disconnect(con2)
- Disconnect(con3)
- end
- end)
- end
- end
- Connect(insGet(window,"DescendantAdded"),ondes)
- for i,v in next,GetDescendants(window) do
- ondes(v)
- end
- end
- local function btn(txt, f)
- local i1=i("TextBox")
- local i2=i("TextButton")
- insSet(i1,"Font",e.Font.SourceSans)
- insSet(i1,"FontSize",e.FontSize.Size14)
- insSet(i1,"Text",txt)
- insSet(i1,"ClearTextOnFocus",false)
- insSet(i1,"Position",u2(0.5,0,0.5,0))
- insSet(i1,"TextColor3",guiTheme.buttonsTextColor)
- insSet(i1,"Name",rs())
- insSet(i1,"Parent",i2)
- insSet(i2,"BackgroundTransparency",1)
- insSet(i2,"TextTransparency",1)
- insSet(i2,"Size",u2(1,0,0,14))
- insSet(i2,"Name",rs())
- if f then
- Connect(insGet(i2,"MouseButton1Click"),f)
- end
- insSet(i2,"Parent",i4)
- return i1
- end
- local function lbl(txt)
- local i1=i("TextBox")
- local i2=i("Frame")
- insSet(i1,"Font",e.Font.SourceSans)
- insSet(i1,"FontSize",e.FontSize.Size14)
- insSet(i1,"Text",txt)
- insSet(i1,"ClearTextOnFocus",false)
- insSet(i1,"TextColor3",guiTheme.labelsTextColor)
- insSet(i1,"Position",u2(0.5,0,0.5))
- insSet(i1,"BackgroundTransparency",1)
- insSet(i1,"Name",rs())
- insSet(i1,"Parent",i2)
- insSet(i2,"Size",u2(1,0,0,14))
- insSet(i2,"BackgroundTransparency",1)
- insSet(i2,"Name",rs())
- insSet(i2,"Parent",i4)
- return i1
- end
- Draggable(i1)
- lbl("by MyWorld")
- lbl("discord.gg/QMy5f6DrbH")
- lbl("original IL by LuaQuack")
- local allowshiftlock=nil
- local ctrltp=nil
- local placeholders=nil
- local clickfling=nil
- local highlightflingtargets=nil
- local discharscripts=nil
- local flingchangestate=nil
- local respawntp=true
- local breakjointsmethod=nil
- local c=nil
- local function stopreanimate()
- if c then
- c=nil
- return true
- end
- return false
- end
- local function reanimate()
- --[[
- FDless reanimate by MyWorld
- aka no client sided instances
- "what else do i optimize here"
- ]]
- local novoid = true --prevents parts from going under workspace.FallenPartsDestroyHeight if you control them
- local speedlimit = 3000 --makes your parts move slower if the magnitude of their velocity is higher than this
- local retVelTime = 0.51 --time that claimed parts have velocity to reclaim in case u lose them
- local walkSpeed = 16 --your walkspeed (can be changed at runtime)
- local jumpPower = 50 --your jump power (can be changed at runtime)
- local gravity = 196.2 --how fast the characters velocity decreases while falling (can be changed at runtime)
- local ctrlclicktp = ctrltp --makes you teleport where u point ur mouse cursor at when click and hold ctrl down
- local clickfling = clickfling --makes you fling the person you clicked when its available to do so
- local flingvel = v3(15000,16000,15000) --the rotation velocity that ur character will have while flinging
- if stopreanimate() then return end
- c=insGet(lp,"Character")
- if not (c and IsDescendantOf(c,ws)) then return end
- local rootpart=gp(c,"HumanoidRootPart","BasePart") or gp(c,"Torso","BasePart") or gp(c,"UpperTorso","BasePart") or timegp(c,"HumanoidRootPart","BasePart",0.5) or FindFirstChildWhichIsA(c,"BasePart")
- if not rootpart then return end
- local cam=nil
- --theres a way to have ws.currentcamera nil on heartbeat and still have the game run normally
- local function refcam()
- local newcam=insGet(ws,"CurrentCamera")
- while not newcam do
- Wait(GetPropertyChangedSignal(ws,"CurrentCamera"))
- newcam=insGet(ws,"CurrentCamera")
- end
- cam=newcam
- end
- refcam()
- local camcf=insGet(cam,"CFrame")
- local enumCamS=e.CameraType.Scriptable
- local camt=insGet(cam,"CameraType")
- local camcon0=nil
- local camcon1=nil
- local camcon2=nil
- local function onnewcamera()
- refcam()
- if camcon0 then
- Disconnect(camcon0)
- Disconnect(camcon1)
- camcon0=nil
- end
- if not c then
- if insGet(cam,"CameraType")==enumCamS then
- insSet(cam,"CameraType",camt)
- end
- return Disconnect(camcon2)
- end
- camcon0=Connect(GetPropertyChangedSignal(cam,"CFrame"),function()
- if insGet(cam,"CFrame")~=camcf then
- insSet(cam,"CFrame",camcf)
- end
- end)
- camcon1=Connect(GetPropertyChangedSignal(cam,"CameraType"),function()
- if insGet(cam,"CameraType")~=enumCamS then
- insSet(cam,"CameraType",enumCamS)
- end
- end)
- if insGet(cam,"CameraType")~=enumCamS then
- insSet(cam,"CameraType",enumCamS)
- end
- if insGet(cam,"CFrame")~=camcf then
- insSet(cam,"CFrame",camcf)
- end
- end
- camcon2=Connect(GetPropertyChangedSignal(ws,"CurrentCamera"),onnewcamera)
- onnewcamera()
- local rGravity=insGet(ws,"Gravity")
- Connect(GetPropertyChangedSignal(ws,"Gravity"),function()
- rGravity=insGet(ws,"Gravity")
- end)
- local fpdh=insGet(ws,"FallenPartsDestroyHeight")
- novoid=novoid and (fpdh+1)
- local Yvel=0
- local cfr=insGet(rootpart,"CFrame")
- local pos=cfGet(cfr,"Position")
- local primarypart=nil
- local shiftlock=false
- local firstperson=false
- local xzvel=v3_0
- local v3_030=v3_010*3
- local camcfLV=cfGet(camcf,"LookVector")
- local camrot=cfl(v3_0,camcfLV)
- local camcfRV=cfGet(camrot,"RightVector")
- local cammag=-v3Get((cfGet(camcf,"Position")-(pos+v3_010*1.5)),"Magnitude")
- pos=pos+v3_010*7
- cfr=cfAdd(cfGet(cfr,"Rotation"),pos)
- local R6parts={
- head={Name="Head"},
- torso={Name="Torso"},
- root={Name="HumanoidRootPart"},
- leftArm={Name="Left Arm"},
- rightArm={Name="Right Arm"},
- leftLeg={Name="Left Leg"},
- rightLeg={Name="Right Leg"}
- }
- rootpart=R6parts.root
- local cframes={}
- for i,v in next,R6parts do
- cframes[v]=cfr
- end
- local joints={
- {
- Name="Neck",
- Part0=R6parts.torso,Part1=R6parts.head,
- C0=cf(0,2,0,-1,0,0,0,0,1,0,1,-0),
- C1=cf(0,-1,0,-1,0,0,0,0,1,0,1,-0)
- },
- {
- Name="RootJoint",
- Part0=rootpart,Part1=R6parts.torso,
- C0=cf(0,0,0,-1,0,0,0,0,1,0,1,-0),
- C1=cf(0,0,0,-1,0,0,0,0,1,0,1,-0)
- },
- {
- Name="Right Shoulder",
- Part0=R6parts.torso,Part1=R6parts.rightArm,
- C0=cf(2,1,0,0,0,1,0,1,-0,-1,0,0),
- C1=cf(-1,1,0,0,0,1,0,1,-0,-1,0,0)
- },
- {
- Name="Left Shoulder",
- Part0=R6parts.torso,Part1=R6parts.leftArm,
- C0=cf(-2,1,0,0,0,-1,0,1,0,1,0,0),
- C1=cf(1,1,0,0,0,-1,0,1,0,1,0,0)
- },
- {
- Name="Right Hip",
- Part0=R6parts.torso,Part1=R6parts.rightLeg,
- C0=cf(2,-2,0,0,0,1,0,1,-0,-1,0,0),
- C1=cf(1,2,0,0,0,1,0,1,-0,-1,0,0)
- },
- {
- Name="Left Hip",
- Part0=R6parts.torso,Part1=R6parts.leftLeg,
- C0=cf(-2,-2,0,0,0,-1,0,1,0,1,0,0),
- C1=cf(-1,2,0,0,0,-1,0,1,0,1,0,0)
- }
- }
- local refreshedjoints={}
- local refreshjointsI=nil
- refreshjointsI=function(part)
- tinsert(refreshedjoints,part)
- for i,v in next,joints do
- local part0=v.Part0
- local part1=v.Part1
- if part1 and (part0==part) then
- cframes[part1]=cfMul(cframes[part],cfMul(v.C0,Inverse(v.C1)))
- if not tfind(refreshedjoints,part1) then
- refreshjointsI(part1)
- end
- elseif part0 and (part1==part) then
- cframes[part0]=cfMul(cframes[part],cfMul(v.C1,Inverse(v.C0)))
- if not tfind(refreshedjoints,part0) then
- refreshjointsI(part0)
- end
- end
- end
- end
- refreshjointsI(rootpart)
- tclear(refreshedjoints)
- local attachments={
- RightShoulderAttachment={R6parts.rightArm,cf(0,1,0,1,0,0,0,1,0,0,0,1)},
- RightGripAttachment={R6parts.rightArm,cf(0,-1,0,1,0,0,0,1,0,0,0,1)},
- LeftFootAttachment={R6parts.leftLeg,cf(0,-1,0,1,0,0,0,1,0,0,0,1)},
- LeftShoulderAttachment={R6parts.leftArm,cf(0,1,0,1,0,0,0,1,0,0,0,1)},
- LeftGripAttachment={R6parts.leftArm,cf(0,-1,0,1,0,0,0,1,0,0,0,1)},
- RootAttachment={rootpart,cf(0,0,0,1,0,0,0,1,0,0,0,1)},
- RightFootAttachment={R6parts.rightLeg,cf(0,-1,0,1,0,0,0,1,0,0,0,1)},
- NeckAttachment={R6parts.torso,cf(0,1,0,1,0,0,0,1,0,0,0,1)},
- BodyFrontAttachment={R6parts.torso,cf(0,0,-0.5,1,0,0,0,1,0,0,0,1)},
- BodyBackAttachment={R6parts.torso,cf(0,0,0.5,1,0,0,0,1,0,0,0,1)},
- LeftCollarAttachment={R6parts.torso,cf(-1,1,0,1,0,0,0,1,0,0,0,1)},
- RightCollarAttachment={R6parts.torso,cf(1,1,0,1,0,0,0,1,0,0,0,1)},
- WaistFrontAttachment={R6parts.torso,cf(0,-1,-0.5,1,0,0,0,1,0,0,0,1)},
- WaistCenterAttachment={R6parts.torso,cf(0,-1,0,1,0,0,0,1,0,0,0,1)},
- WaistBackAttachment={R6parts.torso,cf(0,-1,0.5,1,0,0,0,1,0,0,0,1)},
- HairAttachment={R6parts.head,cf(0,0.6,0,1,0,0,0,1,0,0,0,1)},
- HatAttachment={R6parts.head,cf(0,0.6,0,1,0,0,0,1,0,0,0,1)},
- FaceFrontAttachment={R6parts.head,cf(0,0,-0.6,1,0,0,0,1,0,0,0,1)},
- FaceCenterAttachment={R6parts.head,cf(0,0,0,1,0,0,0,1,0,0,0,1)}
- }
- local function getPart(name,blacklist)
- for i,v in next,cframes do
- if (i.Name==name) and not (blacklist and tfind(blacklist,i)) then
- return i
- end
- end
- return nil
- end
- local function getJoint(name)
- for i,v in next,joints do
- if v.Name==name then
- return v
- end
- end
- return {C0=cf_0,C1=cf_0}
- end
- local function getPartFromMesh(m,t,blacklist)
- if blacklist then
- for v,_ in next,cframes do
- if v.m and (not tfind(blacklist,v)) and sfind(v.m,m) and sfind(v.t,t) then
- return v
- end
- end
- else
- for v,_ in next,cframes do
- if v.m and sfind(v.m,m) and sfind(v.t,t) then
- return v
- end
- end
- end
- local p={m=m,t=t}
- cframes[p]=cfr
- local j={C0=cf_0,C1=cf_0,Part0=p}
- p.j=j
- return p
- end
- local function getPartJoint(p)
- if cframes[p] then
- local j=p.j
- if j then
- return j
- end
- for i,v in next,joints do
- if v.Part0==p then
- return v
- end
- end
- for i,v in next,joints do
- if v.Part1==p then
- return v
- end
- end
- end
- return nil
- end
- local function getAccWeldFromMesh(m,t)
- return getPartJoint(getPartFromMesh(m,t))
- end
- local raycastparams=rp()
- raycastparams.FilterType=e.RaycastFilterType.Blacklist
- raycastparams.RespectCanCollide=true
- local rayfilter={}
- local characters={}
- local function refreshrayfilter()
- tclear(rayfilter)
- for i,v in next,characters do
- tinsert(rayfilter,v)
- end
- raycastparams.FilterDescendantsInstances=rayfilter
- end
- local flingtable={}
- local rootparts={}
- for i,v in next,accessorylimbs do
- v.p=getPart(v.Name)
- end
- local function makePartCons(p,t)
- if (t.p==p) and insGet(p,"Anchored") then
- t.p=nil
- end
- local con0=Connect(GetPropertyChangedSignal(p,"Anchored"),function()
- if insGet(p,"Anchored") then
- if t.p==p then
- t.c=nil
- t.p=nil
- end
- elseif not t.p then
- t.p=p
- end
- end)
- local con1=nil
- con1=Connect(insGet(p,"AncestryChanged"),function()
- if not IsDescendantOf(p,ws) then
- Disconnect(con0)
- Disconnect(con1)
- if t.p==p then
- t.p=nil
- end
- end
- end)
- end
- local ondes=nil
- ondes=function(v)
- if c and IsA(v,"Attachment") and IsDescendantOf(c,ws) then
- local v1=attachments[insGet(v,"Name")]
- if v1 then
- local p=insGet(v,"Parent")
- if insGet(p,"Parent")~=c then
- local meshid,textureid=getMeshOfPart(p)
- if meshid then
- local found=false
- for i,_ in next,cframes do
- if (meshid==i.m) and (textureid==i.t) then
- local p1=i.p
- if p1 and IsDescendantOf(p1,c) then
- if p1==p then
- found=true
- break
- end
- else
- found=true
- i.p=p
- makePartCons(p,i)
- break
- end
- else
- local j=i.j
- if j and sfind(meshid,i.m) and sfind(textureid,i.t) then
- i.m=meshid
- i.t=textureid
- i.l=insGet(p,"Position")
- i.p=p
- makePartCons(p,i)
- i.j=nil
- i.Name=insGet(p,"Name")
- j.C0=insGet(v,"CFrame")
- j.C1=v1[2]
- j.Part1=v1[1]
- tinsert(joints,j)
- found=true
- break
- end
- end
- end
- if not found then
- for i,l in next,accessorylimbs do
- if l.p and sfind(meshid,l.meshid) and sfind(textureid,l.textureid) then
- local t={Name=insGet(p,"Name"),l=insGet(p,"Position"),m=meshid,t=textureid,p=p}
- makePartCons(p,t)
- if placeholders then
- t.v=makeplaceholder(p)
- end
- cframes[t]=insGet(p,"CFrame")
- tinsert(joints,{Part0=t,Part1=l.p,C0=l.C0,C1=cf_0})
- l.p=nil
- found=true
- break
- end
- end
- if not found then
- local t={Name=insGet(p,"Name"),l=insGet(p,"Position"),m=meshid,t=textureid,p=p}
- makePartCons(p,t)
- if placeholders then
- t.v=makeplaceholder(p)
- end
- cframes[t]=insGet(p,"CFrame")
- tinsert(joints,{Part0=t,Part1=v1[1],C0=insGet(v,"CFrame"),C1=v1[2]})
- end
- end
- end
- end
- end
- end
- end
- local charcons={}
- local function onplayer(v)
- local lastc=nil
- local function oncharacter()
- local newc=insGet(v,"Character")
- if c and newc and (newc~=lastc) then
- lastc=newc
- characters[v]=newc
- refreshrayfilter()
- if v==lp then
- if discharscripts then
- Connect(insGet(newc,"DescendantAdded"),discharscripts)
- for i,v in next,GetDescendants(newc) do
- if IsA(v,"Script") then
- insSet(v,"Disabled",true)
- end
- end
- end
- local hrp=timegp(newc,"HumanoidRootPart","BasePart",10)
- if not (hrp and c and IsDescendantOf(newc,ws)) then return end
- c=newc
- local fi,fv=next(flingtable)
- if fi then
- if flingchangestate then
- local hum=FindFirstChildOfClass(c,"Humanoid")
- if hum then
- insGet(hum,"ChangeState")(hum,e.HumanoidStateType.Physics)
- end
- end
- for i,v in next,tclone(flingtable) do
- if not c then
- return
- end
- local startpos=insGet(i,"Position")
- local stoptime=sine+3
- while true do
- twait()
- if sine>stoptime then
- break
- end
- if insGet(i,"Anchored") or not IsDescendantOf(i,ws) then
- break
- end
- if v3Get((startpos-insGet(i,"Position")),"Magnitude")>200 then
- break
- end
- local tcf=cfAdd(insGet(i,"CFrame"),insGet(i,"AssemblyLinearVelocity")*(sin(sine*15)+1))
- if novoid and (cfGet(tcf,"Y")<novoid) then
- tcf=cfAdd(tcf,v3_010*(novoid-cfGet(tcf,"Y")))
- end
- insSet(hrp,"CFrame",tcf)
- insSet(hrp,"AssemblyLinearVelocity",insGet(i,"AssemblyLinearVelocity")*v3_101*75)
- insSet(hrp,"AssemblyAngularVelocity",flingvel)
- end
- if v then
- Destroy(v)
- end
- flingtable[i]=nil
- end
- insSet(hrp,"AssemblyLinearVelocity",v3_0)
- insSet(hrp,"AssemblyAngularVelocity",v3_0)
- insSet(hrp,"CFrame",cfr)
- twait(0.2501)
- end
- if respawntp then
- local startpos=pos+v3(mrandom(-32,32),0,mrandom(-32,32))
- local dir=nil
- local poscheck=true
- while poscheck do
- poscheck=false
- for i,v in next,rootparts do
- local diff=(startpos-insGet(v,"Position"))*v3_101
- if v3Get(diff,"Magnitude")<10 then
- poscheck=true
- dir=dir or (v3Get(diff,"Unit") * 3)
- startpos=startpos+dir
- end
- end
- local diff=(startpos-pos)*v3_101
- if v3Get(diff,"Magnitude")<10 then
- poscheck=true
- dir=dir or (v3Get(diff,"Unit") * 3)
- startpos=startpos+dir
- end
- end
- startpos=cfAdd(cfGet(cfr,"Rotation"),startpos)
- insSet(hrp,"CFrame",startpos)
- insSet(hrp,"AssemblyLinearVelocity",v3_0)
- insSet(hrp,"AssemblyAngularVelocity",v3_0)
- twait(0.2501)
- end
- if newc~=c then
- return
- end
- primarypart=insGet(newc,"PrimaryPart") or hrp
- if breakjointsmethod==1 then
- insGet(newc,"BreakJoints")(newc)
- local h=FindFirstChildOfClass(newc,"Humanoid")
- if h then
- insSet(h,"Health",0)
- end
- elseif breakjointsmethod==2 then
- local h=FindFirstChildOfClass(newc,"Humanoid")
- if h then
- insSet(h,"Health",0)
- else
- insGet(newc,"BreakJoints")(newc)
- end
- else
- insGet(newc,"BreakJoints")(newc)
- end
- Connect(insGet(newc,"DescendantAdded"),ondes)
- for i,v in next,GetDescendants(newc) do
- ondes(v)
- end
- else
- local hrp=timegp(newc,"HumanoidRootPart","BasePart",10)
- if hrp and c and IsDescendantOf(newc,ws) then
- rootparts[v]=hrp
- end
- end
- end
- end
- charcons[v]=Connect(GetPropertyChangedSignal(v,"Character"),oncharacter)
- oncharacter()
- end
- for i,v in next,GetPlayers(plrs) do if v~=lp then tspawn(onplayer,v) end end
- Connect(insGet(plrs,"PlayerAdded"),onplayer)
- onplayer(lp)
- Connect(insGet(plrs,"PlayerRemoving"),function(v)
- local charcon=charcons[v]
- if charcon then
- Disconnect(charcon)
- end
- characters[v]=nil
- rootparts[v]=nil
- end)
- local mradN05=rad(-0.5)
- local KeyCode=e.KeyCode
- local enumMLC=e.MouseBehavior.LockCenter
- local enumMB2=e.UserInputType.MouseButton2
- local enumMLCP=e.MouseBehavior.LockCurrentPosition
- local enumMD=e.MouseBehavior.Default
- local enumMW=e.UserInputType.MouseWheel
- local enumMM=e.UserInputType.MouseMovement
- local mouseBehavior=nil
- local lastMouseBehavior=insGet(uis,"MouseBehavior")
- Connect(GetPropertyChangedSignal(uis,"MouseBehavior"),function()
- if mouseBehavior and (insGet(uis,"MouseBehavior")~=mouseBehavior) then
- insSet(uis,"MouseBehavior",mouseBehavior)
- end
- end)
- local mode="default"
- local defaultmode={}
- local modes={default=defaultmode}
- local lerpsIdle=emptyfunction
- local lerpsWalk=emptyfunction
- local lerpsJump=emptyfunction
- local lerpsFall=emptyfunction
- local function addmode(key,mode)
- if (type(key)~="string") or (type(mode)~="table") then
- return
- end
- for i,v in next,mode do
- if type(v)~="function" then
- mode[i]=nil
- end
- end
- if key=="default" then
- defaultmode=mode
- modes.default=mode
- lerpsIdle=mode.idle or emptyfunction
- lerpsWalk=mode.walk or emptyfunction
- lerpsJump=mode.jump or emptyfunction
- lerpsFall=mode.fall or emptyfunction
- if mode.modeEntered then
- mode.modeEntered()
- end
- elseif #key==1 then
- key=KeyCode[supper(ssub(key,1,1))]
- modes[key]=mode
- end
- end
- local keyW=KeyCode.W
- local Wpressed=IsKeyDown(uis,keyW)
- local keyA=KeyCode.A
- local Apressed=IsKeyDown(uis,keyA)
- local keyS=KeyCode.S
- local Spressed=IsKeyDown(uis,keyS)
- local keyD=KeyCode.D
- local Dpressed=IsKeyDown(uis,keyD)
- local keySpace=KeyCode.Space
- local jumpingInput=IsKeyDown(uis,keySpace)
- local FWmovement=0
- local RTmovement=0
- local isWalking=false
- local function refreshKeyboardMovement()
- if Wpressed then if Spressed then if Dpressed then if Apressed then isWalking=false else FWmovement=0 RTmovement=1 isWalking=true end else if Apressed then FWmovement=0 RTmovement=-1 isWalking=true else isWalking=false end end else FWmovement=1 if Dpressed then if Apressed then RTmovement=0 else RTmovement=1 end else if Apressed then RTmovement=-1 else RTmovement=0 end end isWalking=true end else if Spressed then FWmovement=-1 if Dpressed then if Apressed then RTmovement=0 else RTmovement=1 end else if Apressed then RTmovement=-1 else RTmovement=0 end end isWalking=true else if Dpressed then if Apressed then isWalking=false else FWmovement=0 RTmovement=1 isWalking=true end else if Apressed then FWmovement=0 RTmovement=-1 isWalking=true else isWalking=false end end end end
- end
- refreshKeyboardMovement()
- local keyShift=KeyCode.LeftShift
- Connect(insGet(uis,"InputBegan"),function(a)
- if insGet(gs,"MenuIsOpen") or GetFocusedTextBox(uis) then
- return
- end
- a=insGet(a,"KeyCode")
- if a==keyW then
- Wpressed=true
- refreshKeyboardMovement()
- elseif a==keyA then
- Apressed=true
- refreshKeyboardMovement()
- elseif a==keyS then
- Spressed=true
- refreshKeyboardMovement()
- elseif a==keyD then
- Dpressed=true
- refreshKeyboardMovement()
- elseif a==keySpace then
- jumpingInput=true
- elseif a==keyShift then
- shiftlock=allowshiftlock and not shiftlock
- elseif modes[a] then
- if modes[mode].modeLeft then
- modes[mode].modeLeft()
- end
- if mode==a then
- mode="default"
- else
- mode=a
- end
- local modet=modes[mode]
- lerpsIdle=modet.idle or defaultmode.idle or emptyfunction
- lerpsWalk=modet.walk or defaultmode.walk or emptyfunction
- lerpsJump=modet.jump or defaultmode.jump or emptyfunction
- lerpsFall=modet.fall or defaultmode.fall or emptyfunction
- if modes[mode].modeEntered then
- modes[mode].modeEntered()
- end
- end
- end)
- Connect(insGet(uis,"InputEnded"),function(a)
- a=insGet(a,"KeyCode")
- if a==keyW then
- Wpressed=false
- refreshKeyboardMovement()
- elseif a==keyA then
- Apressed=false
- refreshKeyboardMovement()
- elseif a==keyS then
- Spressed=false
- refreshKeyboardMovement()
- elseif a==keyD then
- Dpressed=false
- refreshKeyboardMovement()
- elseif a==keySpace then
- jumpingInput=false
- end
- end)
- local thumbstickEndX=0
- local thumbstickStartY=0
- local thumbstickSizeMultiplier=0
- local jumpStartX=0
- local jumpStartY=0
- local jumpEndX=0
- local jumpEndY=0
- local thumbstickInputObject=nil
- local jumpInputObject=nil
- local cameraRotateInputObject=nil
- local cameraZoomInputObject=nil
- local thumbstickTouchStart=v3_0
- local cameraZoomInputMagnitude=0
- Connect(insGet(uis,"TouchStarted"),function(inputObject)
- if insGet(gs,"MenuIsOpen") or GetFocusedTextBox(uis) then
- return
- end
- local touchPos=insGet(inputObject,"Position")
- local touchX=v3Get(touchPos,"X")
- local touchY=v3Get(touchPos,"Y")
- if (not thumbstickInputObject) and touchX<thumbstickEndX and touchY>thumbstickStartY then
- thumbstickInputObject=inputObject
- thumbstickTouchStart=insGet(inputObject,"Position")
- isWalking=false
- elseif (not jumpInputObject) and touchY>jumpStartY and touchX>jumpStartX and touchX<jumpEndX and touchY<jumpEndY then
- jumpInputObject=inputObject
- jumpingInput=true
- elseif not cameraRotateInputObject then
- cameraRotateInputObject=inputObject
- else
- cameraZoomInputObject=inputObject
- cameraZoomInputMagnitude=v3Get(insGet(cameraRotateInputObject,"Position")-insGet(cameraZoomInputObject,"Position"),"Magnitude")
- end
- end)
- Connect(insGet(uis,"TouchMoved"),function(inputObject)
- local touchPos=insGet(inputObject,"Position")
- local touchX=v3Get(touchPos,"X")
- local touchY=v3Get(touchPos,"Y")
- if inputObject==thumbstickInputObject then
- local direction=insGet(inputObject,"Position")-thumbstickTouchStart
- local directionMag=v3Get(direction,"Magnitude")/thumbstickSizeMultiplier
- if directionMag>0.05 then
- isWalking=true
- direction=v3Get(direction,"Unit")*min(1,(directionMag-0.05)/0.95)
- FWmovement=-v3Get(direction,"Y")
- RTmovement=v3Get(direction,"X")
- else
- isWalking=false
- end
- elseif inputObject==jumpInputObject then
- jumpingInput=touchY>jumpStartY and touchX>jumpStartX and touchX<jumpEndX and touchY<jumpEndY
- else
- if cameraZoomInputObject then
- local newMagnitude=v3Get(insGet(cameraRotateInputObject,"Position")-insGet(cameraZoomInputObject,"Position"),"Magnitude")
- cammag=cammag+(newMagnitude-cameraZoomInputMagnitude)*0.04*(0.75-cammag/4)
- cameraZoomInputMagnitude=newMagnitude
- if cammag<0 then
- firstperson=false
- else
- cammag=0
- firstperson=true
- end
- elseif inputObject==cameraRotateInputObject then
- local rotation=GetMouseDelta(uis)*mradN05
- camcfLV=cfGet(cfMul(camrot,angles(rotation.Y,rotation.X,0)),"LookVector")
- camrot=cfl(v3_0,camcfLV)
- camcfRV=cfGet(camrot,"RightVector")
- end
- end
- end)
- Connect(insGet(uis,"TouchEnded"),function(inputObject)
- if inputObject==thumbstickInputObject then
- thumbstickInputObject=nil
- isWalking=false
- elseif inputObject==jumpInputObject then
- jumpInputObject=nil
- jumpingInput=false
- elseif inputObject==cameraRotateInputObject then
- cameraRotateInputObject=nil
- cameraZoomInputObject=nil
- elseif inputObject==cameraZoomInputObject then
- cameraZoomInputObject=nil
- end
- end)
- local function refreshTouchRegions()
- local sX=insGet(mouse,"ViewSizeX")
- local sY=insGet(mouse,"ViewSizeY")
- local isSmallScreen=min(sX,sY)<=500
- sY=sY+insGet(gs,"TopbarInset").Height
- thumbstickEndX=sX*0.4
- thumbstickStartY=(sY+0)*0.333
- if isSmallScreen then
- thumbstickSizeMultiplier=35
- jumpStartX=sX-95
- jumpStartY=sY-90
- jumpEndX=jumpStartX+70
- jumpEndY=jumpStartY+70
- else
- thumbstickSizeMultiplier=60
- jumpStartX=sX-170
- jumpStartY=sY-210
- jumpEndX=jumpStartX+120
- jumpEndY=jumpStartY+120
- end
- end
- Connect(GetPropertyChangedSignal(mouse,"ViewSizeX"),refreshTouchRegions)
- Connect(GetPropertyChangedSignal(mouse,"ViewSizeY"),refreshTouchRegions)
- Connect(GetPropertyChangedSignal(gs,"TopbarInset"),refreshTouchRegions)
- refreshTouchRegions()
- local mouseCameraMove=false
- Connect(insGet(uis,"InputChanged"),function(a,b)
- if b then return end
- local inputType=insGet(a,"UserInputType")
- if mouseCameraMove and inputType==enumMM then
- local rotation=GetMouseDelta(uis)*mradN05
- camcfLV=cfGet(cfMul(camrot,angles(rotation.Y,rotation.X,0)),"LookVector")
- camrot=cfl(v3_0,camcfLV)
- camcfRV=cfGet(camrot,"RightVector")
- elseif inputType==enumMW then
- cammag=cammag+v3Get(insGet(a,"Position"),"Z")*(0.75-cammag/4)
- if cammag<0 then
- firstperson=false
- else
- cammag=0
- firstperson=true
- end
- end
- end)
- local function predictionfling(target)
- if not c then
- return false
- end
- if typeof(target)~="Instance" then
- target=insGet(mouse,"Target")
- if not target then
- return false
- end
- end
- if not IsDescendantOf(target,ws) then
- return false
- end
- if IsA(target,"Humanoid") or IsA(target,"BasePart") then
- target=insGet(target,"Parent")
- if IsA(target,"Accessory") then
- target=insGet(target,"Parent")
- end
- end
- if (target==c) or (not IsA(target,"Model")) then
- return false
- end
- local targetpart=gp(target,"HumanoidRootPart","BasePart") or gp(target,"Torso","BasePart") or gp(target,"UpperTorso","BasePart")
- if (not targetpart) or (flingtable[targetpart]~=nil) then
- return false
- end
- if highlightflingtargets then
- local h=i("Highlight")
- insSet(h,"Name",rs())
- insSet(h,"Adornee",target)
- insSet(h,"FillColor",c3(1,0,0))
- insSet(h,"OutlineColor",c3(1,0,0))
- insSet(h,"FillTransparency",0.5)
- insSet(h,"OutlineTransparency",0)
- insSet(h,"Parent",i10)
- flingtable[targetpart]=h
- else
- flingtable[targetpart]=false
- end
- return true
- end
- local clickConnection=nil
- if ctrlclicktp then
- ctrlclicktp=KeyCode.LeftControl
- local tpoff=v3_010*10
- if clickfling then
- clickConnection=Connect(insGet(mouse,"Button1Down"),function()
- if insGet(mouse,"Target") then
- if IsKeyDown(uis,ctrlclicktp) then
- pos=cfGet(insGet(mouse,"Hit"),"Position")+tpoff
- cfr=cfl(pos,pos+camcfLV*v3_101)
- xzvel=v3_0
- Yvel=0
- else
- predictionfling()
- end
- end
- end)
- else
- clickConnection=Connect(insGet(mouse,"Button1Down"),function()
- if insGet(mouse,"Target") and IsKeyDown(uis,ctrlclicktp) then
- pos=cfGet(insGet(mouse,"Hit"),"Position")+tpoff
- cfr=cfl(pos,pos+camcfLV*v3_101)
- xzvel=v3_0
- Yvel=0
- end
- end)
- end
- elseif clickfling then
- clickConnection=Connect(insGet(mouse,"Button1Down"),predictionfling)
- end
- local noYvelTime=1
- local lastsine=sine
- local con=nil
- local function mainFunction()
- if not c then
- for i,v in next,cframes do
- local p=i.v
- if p then
- Destroy(p)
- end
- end
- for i,v in next,flingtable do
- if v then --it could be false
- Destroy(v)
- end
- end
- for i,v in next,charcons do
- Disconnect(v)
- end
- if clickConnection then
- Disconnect(clickConnection)
- end
- mouseBehavior=nil
- insSet(uis,"MouseBehavior",enumMD)
- onnewcamera()
- local c=insGet(lp,"Character")
- if c then
- insSet(cam,"CameraSubject",FindFirstChildOfClass(c,"Humanoid"))
- end
- return con and Disconnect(con)
- end
- sine=osclock()
- local delta=sine-lastsine
- deltaTime=min(delta*10,1)
- lastsine=sine
- if shiftlock then
- if allowshiftlock then
- mouseBehavior=enumMLC
- mouseCameraMove=true
- else
- shiftlock=false
- end
- elseif firstperson then
- mouseBehavior=enumMLC
- mouseCameraMove=true
- elseif IsMouseButtonPressed(uis,enumMB2) then
- mouseBehavior=enumMLCP
- mouseCameraMove=true
- else
- mouseBehavior=enumMD
- mouseCameraMove=false
- end
- if lastMouseBehavior~=mouseBehavior then
- lastMouseBehavior=mouseBehavior
- insSet(uis,"MouseBehavior",mouseBehavior)
- end
- local raycastresult=Raycast(ws,pos,v3_010*(fpdh-v3Get(pos,"Y")),raycastparams)
- local onground=nil
- if raycastresult then
- raycastresult=v3Get(raycastresult.Position,"Y")
- onground=v3Get(pos,"Y")-raycastresult<10.01
- if onground then
- Yvel=0
- pos=pos+v3_010*(raycastresult+10-v3Get(pos,"Y"))*min(delta*20,1)
- if jumpingInput and (jumpPower>0) then
- Yvel=jumpPower
- onground=false
- end
- else
- Yvel=Yvel-gravity*delta
- if v3Get(pos,"Y")+Yvel*delta<raycastresult then
- Yvel=0
- pos=pos+v3_010*(raycastresult+10-v3Get(pos,"Y"))
- end
- end
- else
- Yvel=0
- onground=false
- end
- if firstperson then
- if isWalking then
- if walkSpeed==0 then
- xzvel=v3_0
- if onground then
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsIdle()
- noYvelTime=min(noYvelTime+delta*0.3,1)
- xzvel=xzvel*(1-noYvelTime)
- elseif Yvel>0 then
- pos=pos+v3_010*Yvel*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsJump()
- noYvelTime=0
- else
- pos=pos+v3_010*Yvel*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsFall()
- noYvelTime=0
- end
- else
- xzvel=v3Get(v3Get(camcfLV*v3_101,"Unit")*FWmovement+v3Get(camcfRV*v3_101,"Unit")*RTmovement,"Unit")*walkSpeed
- if onground then
- pos=pos+xzvel*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsWalk()
- noYvelTime=min(noYvelTime+delta*0.3,1)
- xzvel=xzvel*(1-noYvelTime)
- elseif Yvel>0 then
- pos=pos+(xzvel+v3_010*Yvel)*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsJump()
- noYvelTime=0
- else
- pos=pos+(xzvel+v3_010*Yvel)*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsFall()
- noYvelTime=0
- end
- end
- else
- xzvel=v3_0
- if onground then
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsIdle()
- noYvelTime=min(noYvelTime+delta*0.3,1)
- xzvel=xzvel*(1-noYvelTime)
- elseif Yvel>0 then
- pos=pos+v3_010*Yvel*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsJump()
- noYvelTime=0
- else
- pos=pos+v3_010*Yvel*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsFall()
- noYvelTime=0
- end
- end
- elseif shiftlock then
- if isWalking then
- if walkSpeed==0 then
- xzvel=v3_0
- if onground then
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030+camcfRV*1.75+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsIdle()
- noYvelTime=min(noYvelTime+delta*0.3,1)
- xzvel=xzvel*(1-noYvelTime)
- elseif Yvel>0 then
- pos=pos+v3_010*Yvel*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030+camcfRV*1.75+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsJump()
- noYvelTime=0
- else
- pos=pos+v3_010*Yvel*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030+camcfRV*1.75+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsFall()
- noYvelTime=0
- end
- else
- xzvel=v3Get(v3Get(camcfLV*v3_101,"Unit")*FWmovement+v3Get(camcfRV*v3_101,"Unit")*RTmovement,"Unit")*walkSpeed
- if onground then
- pos=pos+xzvel*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030+camcfRV*1.75+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsWalk()
- noYvelTime=min(noYvelTime+delta*0.3,1)
- xzvel=xzvel*(1-noYvelTime)
- elseif Yvel>0 then
- pos=pos+(xzvel+v3_010*Yvel)*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030+camcfRV*1.75+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsJump()
- noYvelTime=0
- else
- pos=pos+(xzvel+v3_010*Yvel)*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030+camcfRV*1.75+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsFall()
- noYvelTime=0
- end
- end
- else
- xzvel=v3_0
- if onground then
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030+camcfRV*1.75+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsIdle()
- noYvelTime=min(noYvelTime+delta*0.3,1)
- xzvel=xzvel*(1-noYvelTime)
- elseif Yvel>0 then
- pos=pos+v3_010*Yvel*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030+camcfRV*1.75+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsJump()
- noYvelTime=0
- else
- pos=pos+v3_010*Yvel*delta
- cfr=cfl(pos,pos+camcfLV*v3_101)
- camcf=cfAdd(camrot,pos+v3_030+camcfRV*1.75+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsFall()
- noYvelTime=0
- end
- end
- else
- if isWalking then
- if walkSpeed==0 then
- xzvel=v3_0
- if onground then
- cfr=cfAdd(cfGet(cfr,"Rotation"),pos)
- camcf=cfAdd(camrot,pos+v3_030+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsIdle()
- noYvelTime=min(noYvelTime+delta*0.3,1)
- xzvel=xzvel*(1-noYvelTime)
- elseif Yvel>0 then
- pos=pos+v3_010*Yvel*delta
- cfr=cfAdd(cfGet(cfr,"Rotation"),pos)
- camcf=cfAdd(camrot,pos+v3_030+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsJump()
- noYvelTime=0
- else
- pos=pos+v3_010*Yvel*delta
- cfr=cfAdd(cfGet(cfr,"Rotation"),pos)
- camcf=cfAdd(camrot,pos+v3_030+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsFall()
- noYvelTime=0
- end
- else
- xzvel=v3Get(v3Get(camcfLV*v3_101,"Unit")*FWmovement+v3Get(camcfRV*v3_101,"Unit")*RTmovement,"Unit")*walkSpeed
- if onground then
- pos=pos+xzvel*delta
- cfr=cfAdd(Lerp(cfGet(cfr,"Rotation"),cfl(v3_0,xzvel),deltaTime),pos)
- camcf=cfAdd(camrot,pos+v3_030+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsWalk()
- noYvelTime=min(noYvelTime+delta*0.3,1)
- xzvel=xzvel*(1-noYvelTime)
- elseif Yvel>0 then
- pos=pos+(xzvel+(v3_010*Yvel))*delta
- cfr=cfAdd(Lerp(cfGet(cfr,"Rotation"),cfl(v3_0,xzvel),deltaTime),pos)
- camcf=cfAdd(camrot,pos+v3_030+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsJump()
- noYvelTime=0
- else
- pos=pos+(xzvel+(v3_010*Yvel))*delta
- cfr=cfAdd(Lerp(cfGet(cfr,"Rotation"),cfl(v3_0,xzvel),deltaTime),pos)
- camcf=cfAdd(camrot,pos+v3_030+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsFall()
- noYvelTime=0
- end
- end
- else
- xzvel=v3_0
- if onground then
- cfr=cfAdd(cfGet(cfr,"Rotation"),pos)
- camcf=cfAdd(camrot,pos+v3_030+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsIdle()
- noYvelTime=min(noYvelTime+delta*0.3,1)
- xzvel=xzvel*(1-noYvelTime)
- elseif Yvel>0 then
- pos=pos+v3_010*Yvel*delta
- cfr=cfAdd(cfGet(cfr,"Rotation"),pos)
- camcf=cfAdd(camrot,pos+v3_030+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsJump()
- noYvelTime=0
- else
- pos=pos+v3_010*Yvel*delta
- cfr=cfAdd(cfGet(cfr,"Rotation"),pos)
- camcf=cfAdd(camrot,pos+v3_030+camcfLV*cammag)
- cframes[rootpart]=cfr
- insSet(cam,"CFrame",camcf)
- lerpsFall()
- noYvelTime=0
- end
- end
- end
- refreshjointsI(rootpart)
- tclear(refreshedjoints)
- local idlerv=v3(sin((sine-0.0375)*16),sin(sine*16),sin((sine+0.075)*16))
- local idleoff=idlerv*0.001
- local claimpos=insGet(primarypart,"Position")
- local claimposY=v3Get(claimpos,"Y")
- for i,v in next,cframes do
- local part=i.p
- if part then
- if insGet(part,"ReceiveAge")==0 then
- local placeholder=i.v
- if novoid and (cfGet(v,"Y")<novoid) then
- v=cfAdd(v,v3_010*(novoid-cfGet(v,"Y")))
- end
- local lastpos=i.l
- local vel=(cfGet(v,"Position")-lastpos)/delta
- if v3Get(vel,"Magnitude")<0.15 then
- if placeholder then
- insSet(placeholder,"Parent",nil)
- end
- v=cfAdd(v,idleoff)
- elseif v3Get(vel,"Magnitude")>speedlimit then
- if placeholder then
- insSet(placeholder,"CFrame",v)
- insSet(placeholder,"Parent",ws)
- end
- vel=v3Get(vel,"Unit")*speedlimit
- v=cfAdd(cfGet(v,"Rotation"),lastpos+vel*delta)
- elseif placeholder then
- insSet(placeholder,"Parent",nil)
- end
- i.l=cfGet(v,"Position")
- local claimtime=i.c
- if claimtime then
- if sine-claimtime<retVelTime then
- insSet(part,"AssemblyLinearVelocity",(claimpos-cfGet(v,"Position"))*v3_101/getFallingTime(cfGet(v,"Y"),claimposY,rGravity)+v3_net)
- else
- insSet(part,"AssemblyLinearVelocity",getNetlessVelocity(vel*noYvelTime+xzvel))
- end
- else
- i.c=sine
- insSet(part,"AssemblyLinearVelocity",getNetlessVelocity(vel*noYvelTime+xzvel))
- end
- insSet(part,"CFrame",v)
- insSet(part,"AssemblyAngularVelocity",idlerv)
- else
- i.c=nil
- i.l=insGet(part,"Position")
- local placeholder=i.v
- if placeholder then
- insSet(placeholder,"CFrame",v)
- insSet(placeholder,"Parent",ws)
- end
- end
- else
- local placeholder=i.v
- if placeholder then
- insSet(placeholder,"CFrame",v)
- insSet(placeholder,"Parent",ws)
- end
- end
- end
- end
- sine=osclock()
- lastsine=sine
- con=Connect(heartbeat,mainFunction)
- mainFunction()
- local function refreshjoints(v) --use this on the main part if u have parts that
- refreshjointsI(v) --are connected with each other but arent connected to rootpart
- tclear(refreshedjoints)
- end
- local legcfR=cf(1,-1,0)
- local legcfL=cf(-1,-1,0)
- local raydir=v3_010*-2
- local function raycastlegs() --this returns 2 values: right leg raycast offset, left leg raycast offset
- local rY=Raycast(ws,cfGet(cfMul(cfr,legcfR),"Position"),raydir,raycastparams)
- local lY=Raycast(ws,cfGet(cfMul(cfr,legcfL),"Position"),raydir,raycastparams)
- return rY and (v3Get(rY.Position,"Y")-(v3Get(pos,"Y")-3)) or 0,lY and (v3Get(lY.Position,"Y")-(v3Get(pos,"Y")-3)) or 0
- end
- local function velbycfrvec() --this returns 2 values: forward/backwards movement (from -1 to 1), right/left movement (from -1 to 1)
- local fw=cfGet(cfr,"LookVector")*xzvel/walkSpeed
- local rt=cfGet(cfr,"RightVector")*xzvel/walkSpeed
- return v3Get(fw,"X")+v3Get(fw,"Z"),v3Get(rt,"X")+v3Get(rt,"Z")
- end
- local lastvel=v3_0
- local velchg1=v3_0
- local function velchgbycfrvec() --this returns 2 values: forward/backwards velocity change, right/left velocity change
- velchg1=velchg1+(lastvel-xzvel) --i recommend setting velchg1 to v3_0 when u start using this function or it will look worse
- lastvel=xzvel
- velchg1=velchg1-velchg1*(deltaTime/2)
- local fw=cfGet(cfr,"LookVector")*velchg1/32
- local rt=cfGet(cfr,"RightVector")*velchg1/32
- return v3Get(fw,"X")+v3Get(fw,"Z"),v3Get(rt,"X")+v3Get(rt,"Z")
- end
- local lastYvel=0
- local velYchg1=0
- local function velYchg() --this returns Y axis velocity change
- velYchg1=clamp(velYchg1+(lastYvel-Yvel),-50,50) --i recommend setting velYchg1 to 0 when u start using this function or it will look worse
- lastYvel=Yvel
- velYchg1=velYchg1-velYchg1*(deltaTime/2)
- return velYchg1
- end
- local function rotToMouse(alpha) --this rotates ur character towards your mouse hit position
- cfr=Lerp(cfr,cfl(pos,pos*v3_010+cfGet(insGet(mouse,"Hit"),"Position")*v3_101),alpha or deltaTime)
- end
- local function glitchJoint(joint,targetGlitchTime,delayFrom,delayTo,radiansFrom,radiansTo)
- if sine>targetGlitchTime then --local glitchtime=0 addMode("x",{idle=function() glitchtime=glitchJoint(joint,glitchtime,0.2,0.4,-0.1,0.1) end})
- radiansFrom=radiansFrom*100
- radiansTo=radiansTo*100
- joint.C0=cfMul(joint.C0,angles(mrandom(radiansFrom,radiansTo)/100,mrandom(radiansFrom,radiansTo)/100,mrandom(radiansFrom,radiansTo)/100))
- return sine+mrandom(delayFrom*100,delayTo*100)/100
- end
- return targetGlitchTime
- end
- local function setWalkSpeed(n)
- if type(n)~="number" then
- n=16
- end
- walkSpeed=n
- end
- local function setJumpPower(n)
- if type(n)~="number" then
- n=50
- end
- jumpPower=n
- end
- local function setGravity(n)
- if type(n)~="number" then
- n=196.2
- end
- gravity=n
- end
- local function setCfr(v) --sets character cframe
- if typeof(v)=="CFrame" then
- local newpos=cfGet(v,"Position")
- camcf=cfAdd(camcf,newpos-pos)
- insSet(cam,"CFrame",camcf)
- cfr=v
- pos=newpos
- elseif typeof(v)=="Vector3" then
- camcf=cfAdd(camcf,v-pos)
- insSet(cam,"CFrame",camcf)
- cfr=cfAdd(cfGet(cfr,"Rotation"),v)
- pos=v
- end
- end
- local function getVel() --returns character velocity
- return xzvel+v3_010*Yvel --important: use only in lerps or it might not work
- end
- local function getCamCF() --returns camera cframe
- return camcf
- end
- local function isFirstPerson() --returns true if user is in first person camera mode
- return firstperson
- end
- return {
- cframes=cframes,
- joints=joints,
- fling=predictionfling,
- predictionfling=predictionfling,
- refreshjoints=refreshjoints,
- raycastlegs=raycastlegs,
- velbycfrvec=velbycfrvec,
- velchgbycfrvec=velchgbycfrvec,
- velYchg=velYchg,
- addmode=addmode,
- getPart=getPart,
- getPartFromMesh=getPartFromMesh,
- getAccWeldFromMesh=getAccWeldFromMesh,
- getJoint=getJoint,
- getPartJoint=getPartJoint,
- rotToMouse=rotToMouse,
- glitchJoint=glitchJoint,
- setWalkSpeed=setWalkSpeed,
- setJumpPower=setJumpPower,
- setGravity=setGravity,
- setCfr=setCfr,
- getVel=getVel,
- getCamCF=getCamCF,
- isFirstPerson=isFirstPerson
- }
- end
- btn("Immortality Lord",function()
- local t=reanimate()
- if type(t)~="table" then return end
- local getJoint=t.getJoint
- local RootJoint=getJoint("RootJoint")
- local RightShoulder=getJoint("Right Shoulder")
- local LeftShoulder=getJoint("Left Shoulder")
- local RightHip=getJoint("Right Hip")
- local LeftHip=getJoint("Left Hip")
- local Neck=getJoint("Neck")
- local getVel=t.getVel
- local setCfr=t.setCfr
- local getCamCF=t.getCamCF
- local cframes=t.cframes
- local joints=t.joints
- local getAccWeldFromMesh=t.getAccWeldFromMesh
- local setWalkSpeed=t.setWalkSpeed
- local fling=t.fling
- setWalkSpeed(32)
- t.setJumpPower(0)
- t.setGravity(math.huge)
- local Gun={C0=cf_0}
- local Sword={C0=cf_0}
- local torso=t.getPart("Torso")
- local rootpart=t.getPart("HumanoidRootPart")
- local leftWingPart={}
- cframes[leftWingPart]=cf_0
- local leftWingAccWeld=getAccWeldFromMesh("17269814619","")
- leftWingAccWeld.C0=angles(0,3.14,0)
- leftWingAccWeld.C1=cf_0
- leftWingAccWeld.Part1=leftWingPart
- local LeftWing={
- C0=cf(-.3,1,1)*angles(0,rad(90),0),
- C1=cf(2.2,2,1.5),
- Part0=torso,
- Part1=leftWingPart
- }
- tinsert(joints,LeftWing)
- local rightWingPart={}
- cframes[rightWingPart]=cf_0
- local rightWingAccWeld=getAccWeldFromMesh("17269824947","")
- rightWingAccWeld.C0=angles(0,3.14,0)
- rightWingAccWeld.C1=cf_0
- rightWingAccWeld.Part1=rightWingPart
- local RightWing={
- C0=cf(.3,1,1)*angles(0,rad(90),0),
- C1=cf(2.2,2,-1.5),
- Part0=torso,
- Part1=rightWingPart
- }
- tinsert(joints,RightWing)
- local swordpart={}
- cframes[swordpart]=cf_0
- local swordAccWeld0=getAccWeldFromMesh("17326555172","")
- swordAccWeld0.C0=cf(-0.0023765564,2.14191723,3.825109,-1,0,0,0,-0.519688249,-0.85435611,0,-0.854355931,0.519688308)
- swordAccWeld0.C1=cf_0
- swordAccWeld0.Part1=swordpart
- local swordAccWeld1=getAccWeldFromMesh("17326476901","")
- swordAccWeld1.C0=cf(-0.00237464905,-1.31204176,-3.18902349,-1,0,0,0,-0.519688249,-0.85435611,0,-0.854355931,0.519688308)
- swordAccWeld1.C1=cf_0
- swordAccWeld1.Part1=swordpart
- local Sword={
- C0=cf(0,-2,0)*angles(1.57,0,0),
- C1=cf(0,-6.3,0),
- Part0=t.getPart("Right Arm"),
- Part1=swordpart
- }
- tinsert(joints,Sword)
- local DefaultsNeckC0 = cf(0,2,0)*angles(rad(-90),0,rad(180))
- local DefaultsRootJointC0 = angles(rad(-90),0,rad(180))
- local DefaultsRightShoulderC0 = cf(-1,0,0)*angles(0,rad(90),0)
- local DefaultsLeftShoulderC0 = cf(1,0,0)*angles(0,rad(-90),0)
- local TimingSine=sine*60
- local attacking=false
- local animOverwrite=nil
- local neckSnap=false
- local function Lerp1(a,b,c)
- return Lerp(a,b,min(c*6*deltaTime,1))
- end
- local v3_030=v3_010*3
- local flycf=nil
- local flypos=nil
- local charcf=cf_0
- local function animations(onground)
- TimingSine=sine*60
- local vel=getVel()
- local xzvel=vel*v3_101
- if flycf then
- if xzvel~=v3_0 then
- local camrot=cfGet(getCamCF(),"Rotation")
- local clv=cfGet(camrot,"LookVector")
- local crv=cfGet(camrot,"RightVector")
- local fw=v3Get(clv*v3_101,"Unit")*xzvel
- fw=clv*(v3Get(fw,"X")+v3Get(fw,"Z"))
- local rt=v3Get(crv*v3_101,"Unit")*xzvel
- rt=crv*(v3Get(rt,"X")+v3Get(rt,"Z"))
- flypos=flypos+v3Get(fw+rt,"Unit")*deltaTime*3.2
- flycf=cfAdd(camrot,flypos)
- charcf=cfAdd(flycf,cfGet(flycf,"UpVector")*3-v3_030)
- end
- cframes[rootpart]=flycf
- setCfr(charcf)
- elseif onground then
- charcf=cframes[rootpart]
- elseif cframes[rootpart].Y<charcf.Y then
- local newcf=cframes[rootpart]
- local lastY=cfGet(charcf,"Y")
- charcf=cfAdd(cfGet(newcf,"Rotation"),v3(cfGet(newcf,"X"),lastY+(cfGet(newcf,"Y")-lastY)*deltaTime*0.6,cfGet(newcf,"Z")))
- cframes[rootpart]=charcf
- setCfr(charcf)
- else
- charcf=cframes[rootpart]
- end
- if attacking then
- animOverwrite()
- elseif xzvel~=v3_0 then
- if neckSnap then
- Neck.C0 = DefaultsNeckC0
- neckSnap = false
- else
- Neck.C0 = Lerp1(Neck.C0,DefaultsNeckC0,.25)
- end
- if mrandom(15) == 1 then
- Neck.C0 = DefaultsNeckC0*angles(rad(mrandom(-20,20)),rad(mrandom(-20,20)),rad(mrandom(-20,20)))
- neckSnap = true
- end
- if onground and not flycf then
- RightShoulder.C0 = Lerp1(RightShoulder.C0,cf(3,1,0)*angles(rad(-10),0,0)*DefaultsRightShoulderC0,.25)
- Sword.C0 = Lerp1(Sword.C0,cf(0,-2,0)*angles(rad(154.35-5.65*sin(TimingSine/25)),0,0),.25)
- else
- RightShoulder.C0 = Lerp1(RightShoulder.C0,cf(3,1,0)*angles(rad(80+5*cos(TimingSine/25)),0,rad(45))*DefaultsRightShoulderC0,.25)
- Sword.C0 = Lerp1(Sword.C0,cf(0,-0,-1)*angles(0,rad(170),rad(-10)),.25)
- end
- RootJoint.C0 = Lerp1(RootJoint.C0,DefaultsRootJointC0*cf(0,0,-sin(TimingSine/25))*angles(rad(20),0,0),.25)
- LeftShoulder.C0 = Lerp1(LeftShoulder.C0,cf(-3,1,0)*angles(rad(20),0,rad(-10-10*cos(TimingSine/25)))*DefaultsLeftShoulderC0,.25)
- RightHip.C0 = Lerp1(RightHip.C0,cf(2,-2,0)*angles(rad(-20),rad(80),rad(10+10*cos(TimingSine/25))),.25)
- LeftHip.C0 = Lerp1(LeftHip.C0,cf(-2,-2,0)*angles(rad(-10),rad(-80),rad(-10-10*cos(TimingSine/25))),.25)
- else
- RootJoint.C0 = Lerp1(RootJoint.C0,DefaultsRootJointC0*cf(0,0,-sin(TimingSine/25))*angles(rad(20),0,0),.25)
- if neckSnap then
- Neck.C0 = DefaultsNeckC0*angles(rad(20),rad(10*sin(TimingSine/50)),0)
- neckSnap = false
- else
- Neck.C0 = Lerp1(Neck.C0,DefaultsNeckC0*angles(rad(20),rad(10*sin(TimingSine/50)),0),.25)
- end
- if mrandom(15) == 1 then
- Neck.C0 = DefaultsNeckC0*angles(rad(20+mrandom(-20,20)),rad((10*sin(TimingSine/50))+mrandom(-20,20)),rad(mrandom(-20,20)))
- neckSnap = true
- end
- if onground and not flycf then
- RightShoulder.C0 = Lerp1(RightShoulder.C0,cf(3,1,0)*angles(rad(-10),0,0)*DefaultsRightShoulderC0,.25)
- Sword.C0 = Lerp1(Sword.C0,cf(0,-2,0)*angles(rad(154.35-5.65*sin(TimingSine/25)),0,0),.25)
- else
- RightShoulder.C0 = Lerp1(RightShoulder.C0,cf(3,1,0)*angles(rad(80+5*cos(TimingSine/25)),0,rad(45))*DefaultsRightShoulderC0,.25)
- Sword.C0 = Lerp1(Sword.C0,cf(0,0,-1)*angles(0,rad(170),rad(-10)),.25)
- end
- LeftShoulder.C0 = Lerp1(LeftShoulder.C0,cf(-3,1,0)*angles(rad(20),0,rad(-10-10*cos(TimingSine/25)))*DefaultsLeftShoulderC0,.25)
- RightHip.C0 = Lerp1(RightHip.C0,cf(2,-2,0)*angles(rad(10),rad(80),rad(10+10*cos(TimingSine/25))),.25)
- LeftHip.C0 = Lerp1(LeftHip.C0,cf(-2,-2,0)*angles(rad(20),rad(-80),rad(-10-10*cos(TimingSine/25))),.25)
- end
- RightWing.C0 = Lerp1(RightWing.C0,cf(0.3,1,1)*angles(0,rad(105-25*cos(TimingSine/25)),0),.25)
- LeftWing.C0 = Lerp1(LeftWing.C0,cf(-0.3,1,1)*angles(0,rad(75+25*cos(TimingSine/25)),0),.25)
- end
- local function onKeyPressed(key)
- if key=="f" then
- if flycf then
- flycf=nil
- charcf=cf(flypos)
- setCfr(charcf)
- else
- flypos=cfGet(cframes[rootpart],"Position")
- flycf=cf(flypos)
- charcf=flycf
- end
- elseif key=="z" then
- if attacking then return end
- attacking=true
- setWalkSpeed(0)
- animOverwrite=function()
- RootJoint.C0 = Lerp1(RootJoint.C0,DefaultsRootJointC0*cf(0,0,-sin(TimingSine/25))*angles(rad(5),0,rad(-20)),.25)
- if neckSnap then
- Neck.C0 = DefaultsNeckC0
- neckSnap = false
- else
- Neck.C0 = Lerp1(Neck.C0,DefaultsNeckC0,.25)
- end
- if mrandom(15) == 1 then
- Neck.C0 = DefaultsNeckC0*angles(rad(mrandom(-20,20)),rad(mrandom(-20,20)),rad(mrandom(-20,20)))
- neckSnap = true
- end
- RightShoulder.C0 = Lerp1(RightShoulder.C0,cf(3,1,0)*angles(rad(80),0,rad(50))*DefaultsRightShoulderC0,.25)
- Sword.C0 = Lerp1(Sword.C0,cf(-1,-1,0)*angles(rad(180),rad(-90),0),.25)
- LeftShoulder.C0 = Lerp1(LeftShoulder.C0,cf(-3,1,0)*angles(rad(5),0,rad(-10-10*cos(TimingSine/25)))*DefaultsLeftShoulderC0,.25)
- RightHip.C0 = Lerp1(RightHip.C0,cf(2,-2,0)*angles(rad(-20),rad(80),rad(10+10*cos(TimingSine/25))),.25)
- LeftHip.C0 = Lerp1(LeftHip.C0,cf(-2,-2,0)*angles(rad(-10),rad(-80),rad(-10-10*cos(TimingSine/25))),.25)
- end
- twait(0.25)
- local flingpos=cfGet(cfMul(cframes[rootpart],cf(0,0,-9)),"Position")
- for i,v in next,GetDescendants(ws) do
- if IsA(v,"Humanoid") then
- local p=v.Parent
- p=gp(p,"HumanoidRootPart","BasePart") or FindFirstChildWhichIsA(p,"BasePart")
- if p and (v3Get(insGet(p,"Position")-flingpos,"Magnitude")<9) then
- fling(v)
- end
- end
- end
- animOverwrite=function()
- RootJoint.C0 = Lerp1(RootJoint.C0,DefaultsRootJointC0*cf(0,0,-sin(TimingSine/25))*angles(rad(5),0,rad(20)),.25)
- if neckSnap then
- Neck.C0 = DefaultsNeckC0
- neckSnap = false
- else
- Neck.C0 = Lerp1(Neck.C0,DefaultsNeckC0,.25)
- end
- if mrandom(15) == 1 then
- Neck.C0 = DefaultsNeckC0*angles(rad(mrandom(-20,20)),rad(mrandom(-20,20)),rad(mrandom(-20,20)))
- neckSnap = true
- end
- RightShoulder.C0 = Lerp1(RightShoulder.C0,cf(2,1,-1)*angles(rad(80),0,rad(-50))*DefaultsRightShoulderC0,.25)
- Sword.C0 = Lerp1(Sword.C0,cf(-1,-1,0)*angles(rad(180),rad(-90),0),.25)
- LeftShoulder.C0 = Lerp1(LeftShoulder.C0,cf(-3,1,0)*angles(rad(5),0,rad(-10-10*cos(TimingSine/25)))*DefaultsLeftShoulderC0,.25)
- RightHip.C0 = Lerp1(RightHip.C0,cf(2,-2,0)*angles(rad(-20),rad(80),rad(10+10*cos(TimingSine/25))),.25)
- LeftHip.C0 = Lerp1(LeftHip.C0,cf(-2,-2,0)*angles(rad(-10),rad(-80),rad(-10-10*cos(TimingSine/25))),.25)
- end
- twait(0.25)
- setWalkSpeed(32)
- attacking=false
- elseif key=="x" then
- attacking=true
- setWalkSpeed(0)
- local newpos=cfGet(insGet(mouse,"Hit"),"Position")+v3_010*10
- local newcf=cfl(newpos,newpos+cfGet(getCamCF(),"LookVector")*v3_101)
- animOverwrite=function()
- RootJoint.C0 = Lerp1(RootJoint.C0,DefaultsRootJointC0*cf(0,0,-sin(TimingSine/25))*angles(rad(20),0,0),.25)
- if neckSnap then
- Neck.C0 = DefaultsNeckC0
- neckSnap = false
- else
- Neck.C0 = Lerp1(Neck.C0,DefaultsNeckC0,.25)
- end
- if mrandom(15) == 1 then
- Neck.C0 = DefaultsNeckC0*angles(rad(mrandom(-20,20)),rad(mrandom(-20,20)),rad(mrandom(-20,20)))
- neckSnap = true
- end
- RightShoulder.C0 = Lerp1(RightShoulder.C0,cf(3,1,0)*angles(rad(80+5*cos(TimingSine/25)),0,rad(45))*DefaultsRightShoulderC0,.25)
- Sword.C0 = Lerp1(Sword.C0,cf(0,-0,-1)*angles(0,rad(170),rad(-10)),.25)
- LeftShoulder.C0 = Lerp1(LeftShoulder.C0,cf(-3,1,0)*angles(rad(20),0,rad(-10-10*cos(TimingSine/25)))*DefaultsLeftShoulderC0,.25)
- RightHip.C0 = Lerp1(RightHip.C0,cf(2,-2,0)*angles(rad(-20),rad(80),rad(10+10*cos(TimingSine/25))),.25)
- LeftHip.C0 = Lerp1(LeftHip.C0,cf(-2,-2,0)*angles(rad(-10),rad(-80),rad(-10-10*cos(TimingSine/25))),.25)
- end
- twait(0.5)
- local animStart=sine
- animOverwrite=function()
- RootJoint.C0 = Lerp1(RootJoint.C0,DefaultsRootJointC0*cf(0,0,-20*(.5+sine-animStart))*angles(rad(20),0,0),.25)
- if neckSnap then
- Neck.C0 = DefaultsNeckC0
- neckSnap = false
- else
- Neck.C0 = Lerp1(Neck.C0,DefaultsNeckC0,.25)
- end
- if mrandom(15) == 1 then
- Neck.C0 = DefaultsNeckC0*angles(rad(mrandom(-20,20)),rad(mrandom(-20,20)),rad(mrandom(-20,20)))
- neckSnap = true
- end
- RightShoulder.C0 = Lerp1(RightShoulder.C0,cf(3,1,0)*angles(rad(80+5*cos(TimingSine/25)),0,rad(45))*DefaultsRightShoulderC0,.25)
- Sword.C0 = Lerp1(Sword.C0,cf(0,-0,-1)*angles(0,rad(170),rad(-10)),.25)
- LeftShoulder.C0 = Lerp1(LeftShoulder.C0,cf(-3,1,0)*angles(rad(20),0,rad(-10-10*cos(TimingSine/25)))*DefaultsLeftShoulderC0,.25)
- RightHip.C0 = Lerp1(RightHip.C0,cf(2,-2,0)*angles(rad(-20),rad(80),rad(10+10*cos(TimingSine/25))),.25)
- LeftHip.C0 = Lerp1(LeftHip.C0,cf(-2,-2,0)*angles(rad(-10),rad(-80),rad(-10-10*cos(TimingSine/25))),.25)
- end
- twait(0.5)
- if flycf then
- flycf=newcf
- flypos=newpos
- end
- charcf=newcf
- setCfr(newcf)
- twait(0.5)
- animStart=sine
- animOverwrite=function()
- RootJoint.C0 = Lerp1(RootJoint.C0,DefaultsRootJointC0*cf(0,0,(-sin(TimingSine/25))-(10-(sine-animStart)*20))*angles(rad(20),0,0),.25)
- if neckSnap then
- Neck.C0 = DefaultsNeckC0
- neckSnap = false
- else
- Neck.C0 = Lerp1(Neck.C0,DefaultsNeckC0,.25)
- end
- if mrandom(15) == 1 then
- Neck.C0 = DefaultsNeckC0*angles(rad(mrandom(-20,20)),rad(mrandom(-20,20)),rad(mrandom(-20,20)))
- neckSnap = true
- end
- RightShoulder.C0 = Lerp1(RightShoulder.C0,cf(3,1,0)*angles(rad(80+5*cos(TimingSine/25)),0,rad(45))*DefaultsRightShoulderC0,.25)
- Sword.C0 = Lerp1(Sword.C0,cf(0,-0,-1)*angles(0,rad(170),rad(-10)),.25)
- LeftShoulder.C0 = Lerp1(LeftShoulder.C0,cf(-3,1,0)*angles(rad(20),0,rad(-10-10*cos(TimingSine/25)))*DefaultsLeftShoulderC0,.25)
- RightHip.C0 = Lerp1(RightHip.C0,cf(2,-2,0)*angles(rad(-20),rad(80),rad(10+10*cos(TimingSine/25))),.25)
- LeftHip.C0 = Lerp1(LeftHip.C0,cf(-2,-2,0)*angles(rad(-10),rad(-80),rad(-10-10*cos(TimingSine/25))),.25)
- end
- twait(0.5)
- setWalkSpeed(32)
- attacking=false
- end
- end
- local function animations1()
- animations(true)
- end
- local function animations0()
- animations(false)
- end
- local lastmode="default"
- t.addmode("default",{
- modeEntered=function()
- onKeyPressed(lastmode)
- lastmode="default"
- end,
- idle=animations1,walk=animations1,jump=animations0,fall=animations0
- })
- t.addmode("z",{
- modeEntered=function()
- onKeyPressed("z")
- lastmode="z"
- end,
- idle=animations1,walk=animations1,jump=animations0,fall=animations0
- })
- t.addmode("x",{
- modeEntered=function()
- onKeyPressed("x")
- lastmode="x"
- end,
- idle=animations1,walk=animations1,jump=animations0,fall=animations0
- })
- t.addmode("f",{
- modeEntered=function()
- onKeyPressed("f")
- lastmode="f"
- end,
- idle=animations1,walk=animations1,jump=animations0,fall=animations0
- })
- end)
- btn("empty reanimate (no animations)", reanimate)
- insSet(btn("stop current script",stopreanimate),"TextColor3",c3(0.75,0,0))
- lbl("SETTINGS (REANIMATE TO APPLY)")
- local function swtc(txt,options,onchanged)
- local current=0
- local swtcbtn=nil
- local function btnpressed()
- current=current+1
- if current>#options then
- current=1
- end
- local option=options[current]
- insSet(swtcbtn,"Text",txt..": "..option.text)
- onchanged(option.value)
- end
- swtcbtn=btn("change",btnpressed)
- btnpressed()
- return swtcbtn
- end
- swtc("client sided placeholders",{
- {value=true,text="yes"},
- {value=false,text="no"}
- },function(v)
- placeholders=v
- end)
- swtc("highlight fling targets",{
- {value=true,text="yes"},
- {value=false,text="no"}
- },function(v)
- highlightflingtargets=v
- end)
- swtc("allow shiftlock",{
- {value=true,text="yes"},
- {value=false,text="no"}
- },function(v)
- allowshiftlock=v
- end)
- swtc("ctrl click tp",{
- {value=false,text="no"},
- {value=true,text="yes"}
- },function(v)
- ctrltp=v
- end)
- swtc("click fling",{
- {value=false,text="no"},
- {value=true,text="yes"}
- },function(v)
- clickfling=v
- end)
- swtc("changestate when fling",{
- {value=true,text="yes"},
- {value=false,text="no"}
- },function(v)
- flingchangestate=v
- end)
- lbl("(limb collision)")
- swtc("respawn tp",{
- {value=true,text="random tp close"},
- {value=false,text="stay at spawn"}
- },function(v)
- respawntp=v
- end)
- local disguiscripts=nil
- swtc("new gui scripts",{
- {value=true,text="disable"},
- {value=false,text="keep"}
- },function(v)
- disguiscripts=v
- end)
- Connect(insGet(pg,"DescendantAdded"),function(v)
- if c and disguiscripts and IsA(v,"Script") then --mind Enum.RunContext.Client
- insSet(v,"Disabled",true)
- end
- end)
- swtc("new character scripts",{
- {value=function(v)
- if IsA(v,"Script") then --mind Enum.RunContext.Client
- insSet(v,"Disabled",true)
- end
- end,text="disable"},
- {value=false,text="keep"}
- },function(v)
- discharscripts=v
- end)
- swtc("breakjoints",{
- {value=1,text="breakjoints+health"},
- {value=2,text="health or breakjoints"},
- {value=3,text="breakjoints"}
- },function(v)
- breakjointsmethod=v
- end)
- local iscg,_=pcall(insSet,i10,"Parent",FindFirstChildOfClass(game,"CoreGui"))
- if not iscg then
- insSet(i7,"Text","PLAYERGUI MODE")
- insSet(i10,"Parent",pg)
- twait(3)
- insSet(i7,"Text",guiTheme.guiTitle)
- end
Add Comment
Please, Sign In to add comment