Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- animator
- local function init()
- local JointData = {}
- JointData["Right Shoulder"] = CFrame.new(1, 0.5, 0, 0, 0, 1, 0, 1, -0, -1, 0, 0)
- JointData["Left Shoulder"] = CFrame.new(-1, 0.5, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0)
- JointData["Right Hip"] = CFrame.new(1, -1, 0, 0, 0, 1, 0, 1, -0, -1, 0, 0)
- JointData["Left Hip"] = CFrame.new(-1, -1, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0)
- JointData["Neck"] = CFrame.new(0, 1, 0, -1, 0, 0, 0, 0, 1, 0, 1, -0)
- JointData["RootJoint"] = CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, -0)
- local Animator = {}
- local Playing = {}
- local GlobalPlaying = {}
- local JointC0 = {}
- local TS = game:GetService("TweenService")
- local function Ver(Model)
- if Model and Model.Parent then
- if not Playing[Model] then
- Playing[Model] = {}
- return true
- end
- end
- end
- local function Play(self, FadeIn, Speed, Looped)
- self.TimePosition = 0
- self.StartInternal = os.clock()
- self.FadeIn = FadeIn or 0
- self.Speed = Speed or self.Speed
- self.Looped = Looped or self.Looped
- self.LastPlayed = os.clock()
- self.fired = {}
- self.RecoverFade = {}
- local StopEvent = Instance.new("BindableEvent")
- self.Stopped = StopEvent.Event
- self.StopEvent = StopEvent
- local LoopedEvent = Instance.new("BindableEvent")
- self.OnLooped = LoopedEvent.Event
- self.LoopedEvent = LoopedEvent
- local KeyframeReachedEvent = Instance.new("BindableEvent")
- self.KeyframeReached = KeyframeReachedEvent.Event
- self.KeyframeReachedEvent = KeyframeReachedEvent
- local MarkerReachedEvent = Instance.new("BindableEvent")
- self.MarkerReached = MarkerReachedEvent.Event
- self.MarkerReachedEvent = MarkerReachedEvent
- local I = Playing[self.Model]
- self.Playing = true
- I[self] = true
- end
- local function Stop(self,fire)
- local I = Playing[self.Model]
- if I then
- if fire then
- self.StopEvent:Fire()
- end
- end
- self.LastPlayed = 0
- self.Playing = false
- I[self] = nil
- self.Stopped = nil
- if self.StopEvent then
- self.StopEvent:Destroy()
- end
- self.StopEvent = nil
- self.OnLooped = nil
- if self.StopEvent then
- self.LoopedEvent:Destroy()
- end
- self.LoopedEvent = nil
- self.KeyframeReached = nil
- if self.StopEvent then
- self.KeyframeReachedEvent:Destroy()
- end
- self.KeyframeReachedEvent = nil
- self.MarkerReached = nil
- if self.StopEvent then
- self.MarkerReachedEvent:Destroy()
- end
- self.MarkerReachedEvent = nil
- self.FadeIn = nil
- end
- local function Resume(self)
- if self.PauseInternal then
- self.StartInternal = os.clock() - self.PauseInternal
- end
- local I = Playing[self.Model]
- self.Playing = true
- I[self] = true
- end
- local function Pause(self)
- local TimeSince = os.clock() - self.StartInternal
- self.PauseInternal = TimeSince
- local I = Playing[self.Model]
- self.Playing = false
- I[self] = nil
- end
- local function SetTime(self, Time)
- self.StartInternal = os.clock() - Time
- end
- local function AdjustSpeed(self, NewSpeed)
- self.Speed = NewSpeed
- end
- local function ft(t,c)
- for i,v in pairs(t) do
- if i == 'Parent' or i == 'Name' or i == 'Marker' or i == 'Time' or i == 'CF' then continue end
- if tonumber(i) and not v.CF then
- v.Time = tonumber(i)
- end
- if typeof(v) == 'table' then
- ft(v,true)
- local name = v.Name
- v.Name = nil
- v = setmetatable(v,{
- __index = {
- Parent = t,
- Name = name or i,
- }
- })
- end
- end
- return t
- end
- local function iter(t)
- local new_t,n = {},0
- for i,v in pairs(t) do
- if i == 'Parent' or i == 'CF' then continue end
- n = n + 1
- new_t[n] = v
- if typeof(v) == 'table' then
- for ii,vv in pairs(iter(v)) do
- n = n + 1
- new_t[n] = vv
- end
- end
- end
- return new_t,n
- end
- local Animations = {}
- function Animator.LoadAnimation(Track, Model)
- assert(Track,'No track.')
- assert(Model,'No model.')
- if Animations[Track] then
- return Animations[Track]
- end
- local Animation = {}
- Animations[Track] = Animation
- Track.Properties.Priority = Enum.AnimationPriority[Track.Properties.Priority]
- Track.Keyframes = ft(Track.Keyframes)
- local kf = Track.Keyframes
- table.sort(kf, function(a, b) return a.Time < b.Time end)
- local Keyframes = {}
- local set_model = Ver(Model)
- local largest_time = 0
- if true then
- local Joints = {}
- local function set_joint()
- for STime, SKeyframe in next, kf do
- STime = tonumber(STime)
- if STime > largest_time then
- largest_time = STime
- end
- local descendants,n = iter(SKeyframe)
- local function set_marker(name)
- if not Keyframes['_null'] then
- Keyframes['_null'] = {}
- end
- Keyframes['_null'][#Keyframes['_null'] + 1] = {Time = STime, Name = name, Marker = 1, ["Info"] = nil}
- end
- if 0 >= n then
- set_marker(SKeyframe.Name)
- end
- for _,Pose in next, descendants do
- if typeof(Pose) ~= 'table' then continue end
- if Pose.Name == 'HumanoidRootPart' then continue end
- if Pose.Marker then
- set_marker(Pose.Name)
- end
- local P0Name = Pose.Parent.Name
- local P1Name = Pose.Name
- local IP0 = Joints[Pose.Parent.Name]
- if not IP0 then continue end
- local Joint = IP0[Pose.Name]
- if not Joint then continue end
- local JT = Keyframes[Joint]
- if not JT then
- JT = {}
- Keyframes[Joint] = JT
- if not JointC0[Joint] then
- local jd = JointData[Joint.Name]
- if jd then
- Joint.C0 = jd
- JointC0[Joint] = jd
- else
- JointC0[Joint] = Joint.C0
- end
- end
- end
- local Style = Pose.ES or 'Linear'
- local Direction = Pose.ED or 'In'
- local Weight = Pose.Weight or 1
- local PCF = Pose.CF
- if not PCF then continue end
- local CF
- for i,v in pairs(PCF) do
- PCF[i] = tonumber(v)
- end
- if PCF[1] then
- CF = CFrame.new(PCF[1],PCF[2],PCF[3])
- else
- CF = CFrame.new()
- end
- if PCF[4] then
- CF = CF*CFrame.Angles(math.rad(PCF[4]),math.rad(PCF[5]),math.rad(PCF[6]))
- end
- local Info = {EasingStyle = Style, EasingDirection = Direction, Weight = Weight, CFrame = CF}
- if not GlobalPlaying[Animation] then
- GlobalPlaying[Animation] = {}
- end
- GlobalPlaying[Animation][Joint.Name] = 1
- JT[#JT+1] = {Time = STime, Name = SKeyframe.Name, ["Info"] = Info}
- end
- end
- Animation.Keyframes = Keyframes
- for Joint,Poses in pairs(Keyframes) do
- table.sort(Poses, function(a, b) return a.Time < b.Time end)
- end
- if not Animation.using then
- Animation.using = {}
- end
- for i,v in pairs(iter(Track.Keyframes)) do
- if typeof(v) == 'table' and v.CF then
- Animation.using[v.Name] = 1
- end
- end
- end
- local function new_joint(Obj,d)
- if Obj:IsA("Weld") then
- local P0 = Obj.Part0
- local P1 = Obj.Part1
- if not P0 or not P1 then return end
- local jd = JointData[Obj.Name]
- if jd then
- Obj.C0 = jd
- JointC0[Obj] = jd
- end
- local T = Joints[P0.Name]
- if not T then
- T = {}
- Joints[P0.Name] = T
- end
- T[P1.Name] = Obj
- --if not d then
- set_joint()
- --end
- end
- end
- for _,obj in next, Model:GetDescendants() do
- new_joint(obj)
- end
- Model.DescendantAdded:Connect(new_joint)
- set_joint()
- end
- Animation.TimePosition = 0
- Animation.TimeLength = largest_time
- Animation.kf = kf
- Animation.Track = Track
- Animation.Model = Model
- Animation.TimeScale = 1
- Animation.GeneralWeight = 1
- Animation.Play = Play
- Animation.Stop = Stop
- Animation.Resume = Resume
- Animation.Pause = Pause
- Animation.SetTime = SetTime
- Animation.AdjustSpeed = AdjustSpeed
- Animation.Looped = Track.Properties.Looping or false
- Animation.Speed = 1
- Animation.FadeIn = 0
- Animation.LastPlayed = 0
- Animation.i = 0
- Animation.Playing = false
- Animation.fired = {}
- Animation.RecoverFade = {}
- if Track.Properties.Priority == Enum.AnimationPriority.Core then
- Animation.Priority = 0
- elseif Track.Properties.Priority == Enum.AnimationPriority.Idle then
- Animation.Priority = 1
- elseif Track.Properties.Priority == Enum.AnimationPriority.Movement then
- Animation.Priority = 2
- elseif Track.Properties.Priority == Enum.AnimationPriority.Action then
- Animation.Priority = 3
- end
- Animation.StartInternal = 0
- Animation.PauseInternal = 0
- Animation.GetTimeOfKeyframe = function(name)
- for Time,v in ipairs(Keyframes) do
- if v.Name == name then
- return Time
- end
- end
- end
- return Animation
- end
- local CF = CFrame.new()
- local function GetPose(TimeSince, Poses, Joint)
- for i = 1,#Poses do
- local Keyframe = Poses[i]
- local NextKeyframe = Poses[i+1]
- local Time = Keyframe.Time
- --local JT = Joint.Transform
- if (TimeSince >= Time) or Poses[1].Time > TimeSince then
- if NextKeyframe then
- local NextTime = NextKeyframe.Time
- if TimeSince < NextTime then
- if Keyframe.Marker then
- return {nil, nil, Keyframe.Name, Time, Keyframe.Marker}
- end
- local Info1 = Keyframe.Info
- local Info2 = NextKeyframe.Info
- local Alpha = (TimeSince - Time) / (NextTime - Time)
- local CFA = CF:Lerp(Info1.CFrame, Info1.Weight)
- local CFB = CF:Lerp(Info2.CFrame, Info2.Weight)
- local Pose = CFA:Lerp(CFB, TS:GetValue(Alpha, Enum.EasingStyle[Info2.EasingStyle], Enum.EasingDirection[Info2.EasingDirection]))
- return {Joint, Pose, Keyframe.Name, Time}
- end
- else
- if Keyframe.Marker then
- return {nil, nil, Keyframe.Name, Time, Keyframe.Marker}
- end
- return {Joint, Keyframe.Info.CFrame, Keyframe.Name, Time}
- end
- end
- end
- end
- local total_playing = 0
- local function UpdatePlaying()
- local tp = 0
- for Model, Animations in next, Playing do
- for Animation,_ in next, Animations do
- if not Model or not Model.Parent then
- Playing[Model] = nil
- Animation.FadeIn = nil
- Animation.fired = {}
- Animation.Playing = false
- continue
- end
- local TimeSince = Animation.StartInternal
- TimeSince = os.clock() - ((os.clock() - TimeSince) * Animation.Speed)
- TimeSince = os.clock() - TimeSince
- --TimeSince = TimeSince * Animation.Speed
- if Animation.FadeIn then
- Animation.OFadeIn = Animation.FadeIn
- end
- local Length = Animation.TimeLength
- if TimeSince > Length then
- Animation.FadeIn = nil
- Animation.fired = {}
- if Animation.Looped then
- Animation.LoopedEvent:Fire()
- if 0 >= Length then
- TimeSince = 0
- else
- TimeSince = TimeSince%Length
- end
- --Animation.StartInternal += Length-TimeSince
- else
- Animation.TimePosition = 0
- Playing[Model][Animation] = nil
- Animation.Playing = false
- Animation.StopEvent:Fire()
- continue
- end
- end
- local Keyframes = Animation.Keyframes
- if Keyframes then else continue end
- tp += 1
- local ToAnimate = {}
- local StartFade = nil
- for Joint, Poses in pairs(Keyframes) do
- if not Poses[1] or not Poses[1].Marker then
- local f,fade
- for i,using in pairs(GlobalPlaying) do
- if i ~= Animation then else
- continue
- end
- if i.Playing then else
- continue
- end
- if using[Joint.Name] then else
- continue
- end
- if i.Priority > Animation.Priority or (i.Priority == Animation.Priority and i.LastPlayed > Animation.LastPlayed) then else
- continue
- end
- f = true
- end
- if f then
- Animation.RecoverFade[Joint.Name] = os.clock()
- continue
- end
- end
- if Poses[1] and Poses[1].Time > TimeSince then
- --StartFade = Poses[1].Time * Animation.Speed
- end
- ToAnimate[#ToAnimate+1] = GetPose(TimeSince, Poses, Joint)
- end
- for i = 1,#ToAnimate do
- local Pose = ToAnimate[i]
- if not Pose[5] then
- local TCF = Pose[2]
- local FadeIn = Animation.FadeIn
- local RF = Animation.RecoverFade[Pose[1].Name]
- local TimeSince = TimeSince
- if RF then
- TimeSince = os.clock()-RF
- if TimeSince >= Length then
- Animation.RecoverFade[Pose[1].Name] = nil
- else
- FadeIn = Animation.OFadeIn
- end
- end
- TCF = JointC0[Pose[1]] * TCF
- if StartFade then
- TCF = Pose[1].C0:Lerp(TCF, TimeSince / StartFade)
- elseif FadeIn and TimeSince < FadeIn then
- TCF = Pose[1].C0:Lerp(TCF, TimeSince / FadeIn)
- end
- Pose[1].C0 = TCF
- end
- if not Animation.fired[Pose[3] .. Pose[4]] and Pose[3] ~= 'Keyframe' then
- Animation.fired[Pose[3] .. Pose[4]] = 1
- if not Pose[4] then -- keyframe
- Animation.KeyframeReachedEvent:Fire(Pose[3])
- elseif Pose[5] then -- keymarker
- Animation.MarkerReachedEvent:Fire(Pose[3])
- end
- end
- end
- Animation.TimePosition = TimeSince
- end
- end
- total_playing = tp
- end
- function Animator.GetPlaying()
- return total_playing
- end
- local con
- if game:GetService("RunService"):IsClient() then
- con = game:GetService("RunService").RenderStepped:Connect(UpdatePlaying)
- else
- con = game:GetService("RunService").Stepped:Connect(UpdatePlaying)
- end
- return Animator,con
- end
- -- anims
- local default_anims = game:GetService("HttpService"):GetAsync('https://pastebin.com/raw/0JSVJpVB')
- default_anims = game:GetService("HttpService"):JSONDecode(default_anims)
- -- anims
- local anims = game:GetService("HttpService"):GetAsync('https://pastebin.com/raw/ayCM7FuF')
- anims = game:GetService("HttpService"):JSONDecode(anims)
- -- starter
- local plr = owner
- local char = plr.Character
- local hum = char:FindFirstChildOfClass("Humanoid")
- local root = char:FindFirstChild("HumanoidRootPart")
- if hum.RigType == Enum.HumanoidRigType.R6 then else
- warn('Humanoid is not R6')
- return
- end
- --
- local animate = char.Animate
- local animator = hum.Animator
- local anim_welds = {}
- local char_welds = {}
- for i,v in pairs(char:GetDescendants()) do
- if v:IsA("Motor6D") then
- local m = Instance.new("Weld")
- m.Name = v.Name
- m.Part0 = v.Part0
- m.Part1 = v.Part1
- m.C0 = v.C0
- m.C1 = v.C1
- m.Parent = v.Parent
- anim_welds[m] = m.Part0
- char_welds[v] = v.Part0
- end
- end
- local idle_anim = Instance.new("Animation")
- idle_anim.AnimationId = 'rbxassetid://125750544'
- idle_anim.Parent = hum
- local taid = 0
- function toggle_anim(mode)
- taid += 1
- local cid = taid
- local function run()
- if cid == taid then else return end
- if mode then
- for i,v in pairs(anim_welds) do
- i.Part0 = v
- end
- else
- for i,v in pairs(anim_welds) do
- i.Part0 = nil
- end
- end
- end
- if not mode then
- task.delay(0.2,run)
- else
- run()
- end
- return cid
- end
- function get_aid()
- return taid
- end
- --
- local animator,con = init()
- function load(anim)
- return animator.LoadAnimation(anim,char)
- end
- local move_anims = {
- fall = {
- anim = load(default_anims.fall),
- fade = 0.3,
- },
- climb = {
- anim = load(default_anims.climb),
- fade = 0.2,
- },
- jump = {
- anim = load(default_anims.jump),
- fade = 0.2,
- },
- walk = {
- anim = load(default_anims.walk),
- fade = 0.2,
- },
- idle = {
- anim = load(default_anims.idle),
- fade = 0.3,
- },
- sit = {
- anim = load(default_anims.sit),
- fade = 0.5,
- },
- }
- local jumped = false
- local current_move = nil
- function play_move_anim(cid)
- if not cid then
- for id,data in pairs(move_anims) do
- if data.anim.Playing then
- data.anim:Stop()
- end
- end
- return
- end
- local data = move_anims[cid]
- if cid == 'walk' then
- data.anim:AdjustSpeed(hum.WalkSpeed/16)
- end
- if not data.anim.Playing then
- local old_data = move_anims[current_move]
- if old_data then
- old_data.anim:Stop()
- end
- current_move = cid
- data.anim:Play(data.fade, nil, true)
- end
- end
- --
- function sleep(n)
- return task.wait(n or 0)
- end
- local function wrap(func)
- coroutine.resume(coroutine.create(func))
- end
- function play_sound(par,id,vol,speed,loop,perm)
- local s = Instance.new("Sound")
- s.SoundId = 'rbxassetid://' .. id
- s.Volume = vol or 0.5
- s.PlaybackSpeed = speed or 1
- s.Looped = loop or false
- s.Parent = par or root
- if not perm then
- s:Play()
- end
- if not loop and not perm then
- s.Ended:Connect(function()
- sleep()
- s:Destroy()
- end)
- end
- return s
- end
- --
- local cs = game:GetService("CollectionService")
- do
- local tool = Instance.new("Tool")
- tool.Name = 'Ignis'
- tool.RequiresHandle = false
- tool.CanBeDropped = false
- tool.Parent = plr:FindFirstChildOfClass("Backpack")
- cs:AddTag(tool,'spell')
- local debounce = false
- local cid
- local function stop()
- cs:RemoveTag(tool,'using')
- debounce = true
- if cid == get_aid() then
- toggle_anim(false)
- end
- task.delay(2,function()
- debounce = false
- end)
- end
- local function check()
- if not cs:HasTag(tool,'using') or hum.PlatformStand then
- stop()
- return true
- end
- end
- local function use()
- cs:AddTag(tool,'using')
- local last
- for i = 1,6 do
- if check() then
- return
- end
- local anim = load(anims['wand' .. i])
- anim:Play(0.15)
- if last then
- last:Stop()
- end
- last = anim
- play_sound(root,1026964101,0.5,2)
- sleep(0.2)
- end
- if check() then
- return
- end
- local anim = load(anims.point)
- anim.Looped = true
- anim:Play(0.2)
- last:Stop()
- --local s = play_sound(root,9117988356,0.4,1)
- local s = play_sound(root,303632290,0.5,1,true)
- local params = OverlapParams.new()
- params.FilterDescendantsInstances = {char}
- params.FilterType = Enum.RaycastFilterType.Blacklist
- params.MaxParts = 100
- local ParticleEmitter0 = Instance.new("ParticleEmitter")
- ParticleEmitter0.Parent = char['Right Arm'].RightGripAttachment
- ParticleEmitter0.Speed = NumberRange.new(15, 15)
- ParticleEmitter0.Color = ColorSequence.new(Color3.new(1, 0.666667, 0),Color3.new(1, 0, 0))
- ParticleEmitter0.LightEmission = 0.5
- ParticleEmitter0.Texture = "rbxassetid://5234388158"
- ParticleEmitter0.Transparency = NumberSequence.new({
- NumberSequenceKeypoint.new(0,0),
- NumberSequenceKeypoint.new(0.7,0),
- NumberSequenceKeypoint.new(1,1),
- })
- ParticleEmitter0.Acceleration = Vector3.new(0,0,0)
- ParticleEmitter0.ZOffset = 0.5
- ParticleEmitter0.Size = NumberSequence.new({
- NumberSequenceKeypoint.new(0,0),
- NumberSequenceKeypoint.new(0.146,0.438),
- NumberSequenceKeypoint.new(0.875,0.875),
- NumberSequenceKeypoint.new(1,1.56),
- })
- ParticleEmitter0.EmissionDirection = Enum.NormalId.Bottom
- ParticleEmitter0.Lifetime = NumberRange.new(0.7, 0.7)
- ParticleEmitter0.LockedToPart = false
- ParticleEmitter0.Rate = 150
- ParticleEmitter0.RotSpeed = NumberRange.new(200, 200)
- ParticleEmitter0.SpreadAngle = Vector2.new(25, 25)
- ParticleEmitter0.VelocitySpread = 25
- ParticleEmitter0.Enabled = true
- local lbox
- local function fire()
- local hit = {}
- local box = Instance.new("Part")
- box.Transparency = 1
- box.Size = Vector3.new(5,5,8)
- box.CFrame = char['Right Arm'].CFrame * CFrame.new(0,-1-4.5-1,0)*CFrame.Angles(math.rad(90),0,0)
- box.Anchored = false
- box.CanCollide = false
- box.Massless = true
- box.Locked = true
- box.Parent = workspace
- if lbox then
- lbox:Destroy()
- end
- lbox = box
- for i,obj in ipairs(workspace:GetPartsInPart(box,params)) do
- local targchar = obj.Parent
- local targhum
- pcall(function()
- targhum = targchar:FindFirstChildOfClass("Humanoid")
- end)
- local targroot
- pcall(function()
- targroot = targchar:FindFirstChild("HumanoidRootPart") or targchar:FindFirstChild("Torso")
- end)
- if targchar and not hit[targchar] and targhum and targroot then
- hit[targchar] = {targchar,targroot,obj}
- local ms = targhum:GetAttribute('mana_shield')
- if ms and ms == 2 then
- return
- end
- local burning = targhum:GetAttribute('burning')
- targhum:SetAttribute('burning',os.clock())
- targhum:SetAttribute('freeze',nil)
- if not burning then
- local p = ParticleEmitter0:Clone()
- p.EmissionDirection = Enum.NormalId.Top
- p.LockedToPart = true
- p.Speed = NumberRange.new(1)
- p.SpreadAngle = Vector2.new(0, 0)
- p.Acceleration = Vector3.new(0,0,0)
- p.Color = ColorSequence.new(Color3.new(1, 0, 0),Color3.new(1, 0, 0))
- p.Texture = "rbxassetid://288279969"
- p.Rate = 100
- p.Parent = targroot
- local dir = (targroot.Position-root.Position).Unit
- local bvel = Instance.new("BodyVelocity")
- bvel.MaxForce = Vector3.new(1/0,1/0,1/0)
- bvel.Velocity = dir*40+Vector3.new(0,5,0)
- bvel.Parent = targroot
- game:GetService("Debris"):AddItem(bvel,0.1)
- local s = play_sound(targroot,303632290,0.5,1,true)
- coroutine.wrap(function()
- while true do
- burning = targhum:GetAttribute('burning') or 0
- if 13.75 >= os.clock()-burning and targchar and targchar.Parent then else
- if targhum then
- targhum:SetAttribute('burning',nil)
- targhum.PlatformStand = false
- end
- if p then
- p.Enabled = false
- task.delay(1.1,function()
- p:Destroy()
- end)
- end
- if s then
- s:Destroy()
- end
- break
- end
- if 2 >= os.clock()-burning then
- targhum.PlatformStand = true
- else
- targhum.PlatformStand = false
- end
- targhum:TakeDamage(3.5)
- sleep(0.5)
- end
- end)()
- end
- end
- end
- end
- local st = os.clock()
- repeat
- fire()
- sleep(0.1)
- until os.clock()-st >= 5 or check()
- anim:Stop()
- if s then
- s:Destroy()
- end
- if ParticleEmitter0 then
- ParticleEmitter0:Destroy()
- end
- stop()
- end
- tool.Activated:Connect(function()
- if debounce then
- return
- end
- if hum:GetAttribute('mana_shield') then
- return
- end
- if cs:HasTag(tool,'using') then
- return
- end
- cid = toggle_anim(true)
- use()
- end)
- tool.Unequipped:Connect(function()
- cs:RemoveTag(tool,'using')
- end)
- end
- do
- local tool = Instance.new("Tool")
- tool.Name = 'Gelidus'
- tool.RequiresHandle = false
- tool.CanBeDropped = false
- tool.Parent = plr:FindFirstChildOfClass("Backpack")
- cs:AddTag(tool,'spell')
- local debounce = false
- local cid
- local function stop()
- cs:RemoveTag(tool,'using')
- debounce = true
- if cid == get_aid() then
- toggle_anim(false)
- end
- task.delay(2,function()
- debounce = false
- end)
- end
- local function check()
- if not cs:HasTag(tool,'using') or hum.PlatformStand then
- stop()
- return true
- end
- end
- local function use()
- cs:AddTag(tool,'using')
- local last
- for i = 1,6 do
- if check() then
- return
- end
- local anim = load(anims['wand' .. i])
- anim:Play(0.15)
- if last then
- last:Stop()
- end
- last = anim
- play_sound(root,1026964101,0.5,2)
- sleep(0.2)
- end
- if check() then
- return
- end
- local anim = load(anims.point)
- anim.Looped = true
- anim:Play(0.2)
- last:Stop()
- --local s = play_sound(root,9117988356,0.4,1)
- local s = play_sound(root,362395087,0.5,1,true)
- local params = OverlapParams.new()
- params.FilterDescendantsInstances = {char}
- params.FilterType = Enum.RaycastFilterType.Blacklist
- params.MaxParts = 100
- local ParticleEmitter0 = Instance.new("ParticleEmitter")
- ParticleEmitter0.Parent = char['Right Arm'].RightGripAttachment
- ParticleEmitter0.Speed = NumberRange.new(15, 15)
- ParticleEmitter0.Color = ColorSequence.new(Color3.new(1, 1, 1),Color3.new(0.333333, 1, 1))
- ParticleEmitter0.LightEmission = 0.5
- ParticleEmitter0.Texture = "rbxassetid://5234388158"
- ParticleEmitter0.Transparency = NumberSequence.new({
- NumberSequenceKeypoint.new(0,0),
- NumberSequenceKeypoint.new(0.7,0),
- NumberSequenceKeypoint.new(1,1),
- })
- ParticleEmitter0.Acceleration = Vector3.new(0,0,0)
- ParticleEmitter0.ZOffset = 0.5
- ParticleEmitter0.Size = NumberSequence.new({
- NumberSequenceKeypoint.new(0,0),
- NumberSequenceKeypoint.new(0.146,0.438),
- NumberSequenceKeypoint.new(0.875,0.875),
- NumberSequenceKeypoint.new(1,1.56),
- })
- ParticleEmitter0.EmissionDirection = Enum.NormalId.Bottom
- ParticleEmitter0.Lifetime = NumberRange.new(0.7, 0.7)
- ParticleEmitter0.LockedToPart = false
- ParticleEmitter0.Rate = 150
- ParticleEmitter0.RotSpeed = NumberRange.new(200, 200)
- ParticleEmitter0.SpreadAngle = Vector2.new(25, 25)
- ParticleEmitter0.VelocitySpread = 25
- ParticleEmitter0.Enabled = true
- local lbox
- local function fire()
- local hit = {}
- local box = Instance.new("Part")
- box.Transparency = 1
- box.Size = Vector3.new(5,5,8)
- box.CFrame = char['Right Arm'].CFrame * CFrame.new(0,-1-4.5-1,0)*CFrame.Angles(math.rad(90),0,0)
- box.Anchored = false
- box.CanCollide = false
- box.Massless = true
- box.Locked = true
- box.Parent = workspace
- if lbox then
- lbox:Destroy()
- end
- lbox = box
- for i,obj in ipairs(workspace:GetPartsInPart(box,params)) do
- local targchar = obj.Parent
- local targhum
- pcall(function()
- targhum = targchar:FindFirstChildOfClass("Humanoid")
- end)
- local targroot
- pcall(function()
- targroot = targchar:FindFirstChild("HumanoidRootPart") or targchar:FindFirstChild("Torso")
- end)
- if targchar and not hit[targchar] and targhum and targroot then
- hit[targchar] = {targchar,targroot,obj}
- local ms = targhum:GetAttribute('mana_shield')
- if ms and ms == 2 then
- return
- end
- local freeze = targhum:GetAttribute('freeze')
- targhum:SetAttribute('freeze',os.clock())
- targhum:SetAttribute('burning',nil)
- if not freeze then
- targhum:TakeDamage(1)
- local Part0 = Instance.new("Part")
- Part0.CFrame = CFrame.new(-15.7232018, 3, 13.8946533, 1, 0, 0, 0, 1, 0, 0, 0, 1)
- Part0.Position = Vector3.new(-15.723201751708984, 3, 13.8946533203125)
- Part0.Color = Color3.new(0, 1, 1)
- Part0.Transparency = 0.5
- Part0.Size = Vector3.new(5, 6, 5)
- Part0.BottomSurface = Enum.SurfaceType.Smooth
- Part0.BrickColor = BrickColor.new("Toothpaste")
- Part0.Material = Enum.Material.Ice
- Part0.TopSurface = Enum.SurfaceType.Smooth
- Part0.brickColor = BrickColor.new("Toothpaste")
- Part0.Massless = true
- Part0.CanCollide = false
- Part0.Anchored = false
- local w = Instance.new("Motor6D")
- w.Part0 = targroot
- w.Part1 = Part0
- w.Parent = Part0
- Part0.Parent = targroot
- local dir = (targroot.Position-root.Position).Unit
- local bvel = Instance.new("BodyVelocity")
- bvel.MaxForce = Vector3.new(1/0,1/0,1/0)
- bvel.Velocity = dir*40+Vector3.new(0,5,0)
- bvel.Parent = targroot
- game:GetService("Debris"):AddItem(bvel,0.1)
- coroutine.wrap(function()
- while true do
- freeze = targhum:GetAttribute('freeze') or 0
- if 3 >= os.clock()-freeze and targchar and targchar.Parent then else
- if targhum then
- targhum:SetAttribute('freeze',nil)
- targhum.PlatformStand = false
- end
- if Part0 then
- Part0:Destroy()
- end
- break
- end
- targhum.PlatformStand = true
- sleep(0.1)
- end
- end)()
- end
- end
- end
- end
- local st = os.clock()
- repeat
- fire()
- sleep(0.1)
- until os.clock()-st >= 5 or check()
- anim:Stop()
- if s then
- s:Destroy()
- end
- if ParticleEmitter0 then
- ParticleEmitter0:Destroy()
- end
- stop()
- end
- tool.Activated:Connect(function()
- if debounce then
- return
- end
- if hum:GetAttribute('mana_shield') then
- return
- end
- if cs:HasTag(tool,'using') then
- return
- end
- cid = toggle_anim(true)
- use()
- end)
- tool.Unequipped:Connect(function()
- cs:RemoveTag(tool,'using')
- end)
- end
- do
- local holding = {}
- function block(input)
- if input.press then
- local hold = holding[input.key]
- local tool = char:FindFirstChildOfClass("Tool")
- local shield_type = 0
- if tool and cs:HasTag(tool,'spell') then
- shield_type = 2
- if not cs:HasTag(tool,'using') then else
- return
- end
- else
- shield_type = 1
- end
- if not hum.PlatformStand then else
- return
- end
- local Part0 = Instance.new("Part")
- Part0.CFrame = root.CFrame
- Part0.Color = Color3.fromRGB(111, 31, 217)
- Part0.Transparency = 0.7
- Part0.Size = Vector3.new(0,0,0)
- Part0.Shape = Enum.PartType.Ball
- Part0.Anchored = false
- Part0.CanCollide = false
- Part0.Massless = true
- Part0.Material = Enum.Material.Neon
- local w = Instance.new("Motor6D")
- w.Part0 = root
- w.Part1 = Part0
- w.Parent = Part0
- Part0.Parent = char
- hum:SetAttribute('mana_shield',shield_type)
- local exists = 1
- local hcc
- if shield_type == 2 then -- magic
- Part0.BrickColor = BrickColor.new("Royal purple")
- char.ChildRemoved:Connect(function(obj)
- if obj == tool then
- exists = nil
- end
- end)
- else -- physical
- Part0.BrickColor = BrickColor.new("Institutional white")
- local oldhp = hum.Health
- hcc = hum.HealthChanged:Connect(function(newhp)
- local change = oldhp-newhp
- if change > 0 then
- hum.Health = newhp + change
- local s = play_sound(root,8460106618,0.4)
- end
- oldhp = hum.Health
- end)
- exists = nil
- char.ChildAdded:Connect(function(obj)
- if obj:IsA("Tool") then
- exists = 1
- end
- end)
- end
- game:GetService("TweenService"):Create(Part0,TweenInfo.new(0.5),{
- Size = Vector3.new(7,7,7)
- }):Play()
- local function stop()
- if Part0 then
- game:GetService("TweenService"):Create(Part0,TweenInfo.new(0.5),{
- Size = Vector3.new(0,0,0)
- }):Play()
- game:GetService("Debris"):AddItem(Part0,0.5)
- end
- local s = play_sound(root,588735437,0.6)
- hum:SetAttribute('mana_shield',nil)
- if hcc then
- hcc:Disconnect()
- end
- end
- local s = play_sound(root,588734767,0.6)
- while true do
- if shield_type == 2 then
- if exists then else
- stop()
- break
- end
- else
- if not exists then else
- stop()
- break
- end
- end
- if hold == holding[input.key] and not hum.PlatformStand then else
- stop()
- break
- end
- sleep()
- end
- end
- end
- local keys = {
- [Enum.KeyCode.F] = block,
- }
- local remote = Instance.new("RemoteEvent")
- remote.Parent = char
- remote.OnServerEvent:Connect(function(lplr,mode,key)
- if plr == lplr and key then
- if not holding[key] then
- holding[key] = 0
- end
- holding[key] += 1
- local f = keys[key]
- if f then
- f({
- press = mode,
- key = key,
- })
- end
- end
- end)
- NLS([[
- local remote = script.Parent
- local uis = game:GetService("UserInputService")
- uis.InputBegan:Connect(function(input,press)
- if not press then else return end
- local key
- if input.UserInputType == Enum.UserInputType.Keyboard then
- key = input.KeyCode
- elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
- key = Enum.UserInputType.MouseButton1
- elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
- key = Enum.UserInputType.MouseButton2
- end
- if key then
- remote:FireServer(true,key)
- end
- end)
- uis.InputEnded:Connect(function(input,press)
- local key
- if input.UserInputType == Enum.UserInputType.Keyboard then
- key = input.KeyCode
- elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
- key = Enum.UserInputType.MouseButton1
- elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
- key = Enum.UserInputType.MouseButton2
- end
- if key then
- remote:FireServer(false,key)
- end
- end)
- ]],remote)
- end
- --
- toggle_anim(false)
- print([[
- Rogue Lineage
- - Ignis and Gelidus
- - F - Equipped - block magical
- - F - Unequipped - block physical
- ]])
- local c
- c = game:GetService("RunService").Heartbeat:Connect(function()
- if not char or not char.Parent or 0 >= hum.Health then
- c:Disconnect()
- return
- end
- local dir = root.Velocity
- local params = RaycastParams.new()
- params.FilterType = Enum.RaycastFilterType.Blacklist
- params.FilterDescendantsInstances = {char}
- params.IgnoreWater = false
- local ground = workspace:Raycast(root.Position,root.CFrame.UpVector*-1*5,params)
- local jumpvel = dir.Y
- local walkvel = (dir*Vector3.new(1,0,1)).Magnitude
- local movevel = dir.Magnitude
- local faceDir = root.CFrame.lookVector.Unit
- local moveDir = dir.Unit
- local dot = faceDir:Dot(moveDir)
- local moving,air_state
- if walkvel > 0.01 then
- moving = true
- else
- moving = false
- end
- local state = hum:GetState()
- if state == Enum.HumanoidStateType.Freefall then
- air_state = 1
- elseif state == Enum.HumanoidStateType.Jumping then
- air_state = 2
- else
- air_state = 0
- end
- if state == Enum.HumanoidStateType.Jumping then
- jumped = true
- else
- jumped = false
- end
- if state == Enum.HumanoidStateType.Climbing then
- play_move_anim('climb')
- elseif hum.Sit then
- play_move_anim('sit')
- elseif air_state == 1 then
- play_move_anim('fall')
- elseif air_state == 2 then
- play_move_anim('jump')
- elseif moving then
- play_move_anim('walk')
- else
- play_move_anim('idle')
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement