SHOW:
|
|
- or go back to the newest paste.
| 1 | --effect test i guess | |
| 2 | --press z while hovering over som1 to steal soul B) | |
| 3 | -- Created by Nebula_Zorua -- | |
| 4 | -- Discord: Nebula the Zorua#6969 | |
| 5 | -- Youtube: https://www.youtube.com/channel/UCo9oU9dCw8jnuVLuy4_SATA | |
| 6 | ||
| 7 | ||
| 8 | --// Initializing \\-- | |
| 9 | local S = setmetatable({},{__index = function(s,i) return game:service(i) end})
| |
| 10 | local Plrs = S.Players | |
| 11 | local Plr = Plrs.LocalPlayer | |
| 12 | local Char = Plr.Character | |
| 13 | local Torso = Char.Torso | |
| 14 | local Mouse = Plr:GetMouse() | |
| 15 | ||
| 16 | --// Shortcut Variables \\-- | |
| 17 | local CF = {N=CFrame.new,A=CFrame.Angles,fEA=CFrame.fromEulerAnglesXYZ}
| |
| 18 | local C3 = {N=Color3.new,RGB=Color3.fromRGB,HSV=Color3.fromHSV,tHSV=Color3.toHSV}
| |
| 19 | local V3 = {N=Vector3.new,FNI=Vector3.FromNormalId,A=Vector3.FromAxis}
| |
| 20 | local M = {C=math.cos,R=math.rad,S=math.sin,P=math.pi,RNG=math.random,MRS=math.randomseed,H=math.huge,RRNG = function(min,max,div) return math.rad(math.random(min,max)/(div or 1)) end}
| |
| 21 | local De = S.Debris | |
| 22 | local WS = workspace | |
| 23 | local Lght = S.Lighting | |
| 24 | local RS = S.ReplicatedStorage | |
| 25 | local IN = Instance.new | |
| 26 | --// Instance Creation Functions \\-- | |
| 27 | ||
| 28 | function Sound(parent,id,pitch,volume,looped,effect,autoPlay) | |
| 29 | local Sound = IN("Sound")
| |
| 30 | Sound.SoundId = "rbxassetid://".. tostring(id or 0) | |
| 31 | Sound.Pitch = pitch or 1 | |
| 32 | Sound.Volume = volume or 1 | |
| 33 | Sound.Looped = looped or false | |
| 34 | if(autoPlay)then | |
| 35 | coroutine.wrap(function() | |
| 36 | repeat wait() until Sound.IsLoaded | |
| 37 | Sound.Playing = autoPlay or false | |
| 38 | end)() | |
| 39 | end | |
| 40 | if(not looped and effect)then | |
| 41 | Sound.Stopped:connect(function() | |
| 42 | Sound.Volume = 0 | |
| 43 | Sound:destroy() | |
| 44 | end) | |
| 45 | elseif(effect)then | |
| 46 | warn("Sound can't be looped and a sound effect!")
| |
| 47 | end | |
| 48 | Sound.Parent =parent or Torso | |
| 49 | return Sound | |
| 50 | end | |
| 51 | function Part(parent,color,material,size,cframe,anchored,cancollide) | |
| 52 | local part = IN("Part")
| |
| 53 | part[typeof(color) == 'BrickColor' and 'BrickColor' or 'Color'] = color or C3.N(0,0,0) | |
| 54 | part.Material = material or Enum.Material.SmoothPlastic | |
| 55 | part.TopSurface,part.BottomSurface=10,10 | |
| 56 | part.Size = size or V3.N(1,1,1) | |
| 57 | part.CFrame = cframe or CF.N(0,0,0) | |
| 58 | part.Anchored = anchored or true | |
| 59 | part.CanCollide = cancollide or false | |
| 60 | part.Parent = parent or Char | |
| 61 | return part | |
| 62 | end | |
| 63 | function Mesh(parent,meshtype,meshid,textid,scale,offset) | |
| 64 | local part = IN("SpecialMesh")
| |
| 65 | part.MeshId = meshid or "" | |
| 66 | part.TextureId = textid or "" | |
| 67 | part.Scale = scale or V3.N(1,1,1) | |
| 68 | part.Offset = offset or V3.N(0,0,0) | |
| 69 | part.MeshType = meshtype or Enum.MeshType.Sphere | |
| 70 | part.Parent = parent | |
| 71 | return part | |
| 72 | end | |
| 73 | ||
| 74 | NewInstance = function(instance,parent,properties) | |
| 75 | local inst = Instance.new(instance,parent) | |
| 76 | if(properties)then | |
| 77 | for i,v in next, properties do | |
| 78 | pcall(function() inst[i] = v end) | |
| 79 | end | |
| 80 | end | |
| 81 | return inst; | |
| 82 | end | |
| 83 | ||
| 84 | local Frame_Speed = 60 -- The frame speed for swait. 1 is automatically divided by this | |
| 85 | ||
| 86 | local Effects = IN("Folder",Char)
| |
| 87 | Effects.Name = "Effects" | |
| 88 | --// Artificial HB \\-- | |
| 89 | ||
| 90 | local ArtificialHB = IN("BindableEvent", script)
| |
| 91 | ArtificialHB.Name = "Heartbeat" | |
| 92 | ||
| 93 | script:WaitForChild("Heartbeat")
| |
| 94 | ||
| 95 | local tf = 0 | |
| 96 | local allowframeloss = false | |
| 97 | local tossremainder = false | |
| 98 | local lastframe = tick() | |
| 99 | local frame = 1/Frame_Speed | |
| 100 | ArtificialHB:Fire() | |
| 101 | ||
| 102 | game:GetService("RunService").Heartbeat:connect(function(s, p)
| |
| 103 | tf = tf + s | |
| 104 | if tf >= frame then | |
| 105 | if allowframeloss then | |
| 106 | script.Heartbeat:Fire() | |
| 107 | lastframe = tick() | |
| 108 | else | |
| 109 | for i = 1, math.floor(tf / frame) do | |
| 110 | ArtificialHB:Fire() | |
| 111 | end | |
| 112 | lastframe = tick() | |
| 113 | end | |
| 114 | if tossremainder then | |
| 115 | tf = 0 | |
| 116 | else | |
| 117 | tf = tf - frame * math.floor(tf / frame) | |
| 118 | end | |
| 119 | end | |
| 120 | end) | |
| 121 | ||
| 122 | function swait(num) | |
| 123 | if num == 0 or num == nil then | |
| 124 | ArtificialHB.Event:wait() | |
| 125 | else | |
| 126 | for i = 0, num do | |
| 127 | ArtificialHB.Event:wait() | |
| 128 | end | |
| 129 | end | |
| 130 | end | |
| 131 | ||
| 132 | ||
| 133 | --// Effect Function(s) \\-- | |
| 134 | ||
| 135 | function Bezier(startpos, pos2, pos3, endpos, t) | |
| 136 | local A = startpos:lerp(pos2, t) | |
| 137 | local B = pos2:lerp(pos3, t) | |
| 138 | local C = pos3:lerp(endpos, t) | |
| 139 | local lerp1 = A:lerp(B, t) | |
| 140 | local lerp2 = B:lerp(C, t) | |
| 141 | local cubic = lerp1:lerp(lerp2, t) | |
| 142 | return cubic | |
| 143 | end | |
| 144 | ||
| 145 | function Effect(data) | |
| 146 | local FX = data.Effect or 'Resize-AndFade' | |
| 147 | local Parent = data.Parent or Effects | |
| 148 | local Color = data.Color or C3.N(0,0,0) | |
| 149 | local Size = data.Size or V3.N(1,1,1) | |
| 150 | local MoveDir = data.MoveDirection or nil | |
| 151 | local MeshData = data.Mesh or nil | |
| 152 | local SndData = data.Sound or nil | |
| 153 | local Frames = data.Frames or 45 | |
| 154 | local Manual = data.Manual or nil | |
| 155 | local Material = data.Material or nil | |
| 156 | local CFra = data.CFrame or Torso.CFrame | |
| 157 | local Settings = data.FXSettings or {}
| |
| 158 | local Snd,Prt,Msh; | |
| 159 | if(Manual and typeof(Manual) == 'Instance' and Manual:IsA'BasePart')then | |
| 160 | Prt = Manual | |
| 161 | else | |
| 162 | Prt = Part(Parent,Color,Material,Size,CFra,true,false) | |
| 163 | end | |
| 164 | if(typeof(MeshData) == 'table')then | |
| 165 | Msh = Mesh(Prt,MeshData.MeshType,MeshData.MeshId,MeshData.TextureId,MeshData.Scale,MeshData.Offset) | |
| 166 | elseif(typeof(MeshData) == 'Instance')then | |
| 167 | Msh = MeshData:Clone() | |
| 168 | Msh.Parent = Prt | |
| 169 | end | |
| 170 | if(typeof(SndData) == 'table' or typeof(SndData) == 'Instance')then | |
| 171 | Snd = Sound(Prt,SndData.SoundId,SndData.Pitch,SndData.Volume,false,false,true) | |
| 172 | end | |
| 173 | if(Snd)then | |
| 174 | repeat wait() until Snd.Playing and Snd.IsLoaded and Snd.TimeLength > 0 | |
| 175 | Frames = Snd.TimeLength * Frame_Speed/Snd.Pitch | |
| 176 | end | |
| 177 | local MoveSpeed = nil; | |
| 178 | if(MoveDir)then | |
| 179 | MoveSpeed = (CFra.p - MoveDir).magnitude/Frames | |
| 180 | end | |
| 181 | local Inc = M.RNG()-M.RNG() | |
| 182 | local Thingie = 0 | |
| 183 | local Thingie2 = M.RNG(50,100)/100 | |
| 184 | ||
| 185 | coroutine.wrap(function() | |
| 186 | if(FX ~= 'Arc')then | |
| 187 | for i = 1, Frames do | |
| 188 | if(FX == 'Resize-AndFade')then | |
| 189 | if(not Settings.EndSize)then | |
| 190 | Settings.EndSize = V3.N(0,0,0) | |
| 191 | end | |
| 192 | local grow = (typeof(Settings.EndSize) == 'Vector3' and Settings.EndSize-Size or typeof(Settings.EndSize) == 'number' and V3.N(Settings.EndSize)) | |
| 193 | Prt.Size = Prt.Size - grow/Frames | |
| 194 | Prt.Transparency = (i/Frames) | |
| 195 | elseif(FX == 'Resize+AndFade')then | |
| 196 | if(not Settings.EndSize)then | |
| 197 | Settings.EndSize = Size*2 | |
| 198 | end | |
| 199 | local grow = (typeof(Settings.EndSize) == 'Vector3' and Settings.EndSize-Size or typeof(Settings.EndSize) == 'number' and V3.N(Settings.EndSize)) | |
| 200 | Prt.Size = Prt.Size + grow/Frames | |
| 201 | Prt.Transparency = (i/Frames) | |
| 202 | elseif(FX == 'Fade')then | |
| 203 | Prt.Transparency = (i/Frames) | |
| 204 | end | |
| 205 | if(Settings.RandomizeCFrame)then | |
| 206 | Prt.CFrame = Prt.CFrame * CF.A(M.RRNG(-360,360),M.RRNG(-360,360),M.RRNG(-360,360)) | |
| 207 | end | |
| 208 | if(MoveDir and MoveSpeed)then | |
| 209 | local Orientation = Prt.Orientation | |
| 210 | Prt.CFrame = CF.N(Prt.Position,MoveDir)*CF.N(0,0,-MoveSpeed) | |
| 211 | Prt.Orientation = Orientation | |
| 212 | end | |
| 213 | if(swait and typeof(swait) == 'function')then | |
| 214 | swait() | |
| 215 | else | |
| 216 | wait() | |
| 217 | end | |
| 218 | end | |
| 219 | Prt:destroy() | |
| 220 | else | |
| 221 | local start,third,fourth,endP = Settings.Start,Settings.Third,Settings.Fourth,Settings.End | |
| 222 | if(not Settings.End and Settings.Home)then endP = Settings.Home.CFrame end | |
| 223 | local quarter = third or start:lerp(endP, 0.25) * CF.N(M.RNG(-25,25),M.RNG(0,25),M.RNG(-25,25)) | |
| 224 | local threequarter = fourth or start:lerp(endP, 0.75) * CF.N(M.RNG(-25,25),M.RNG(0,25),M.RNG(-25,25)) | |
| 225 | assert(start ~= nil,"You need to specify a start point!") | |
| 226 | assert(endP ~= nil,"You need to specify an end point!") | |
| 227 | for i = 0, 1, Settings.Speed or 0.01 do | |
| 228 | if(Settings.Home)then | |
| 229 | endP = Settings.Home.CFrame | |
| 230 | end | |
| 231 | Prt.CFrame = Bezier(start, quarter, threequarter, endP, i) | |
| 232 | if(swait and typeof(swait) == 'function')then | |
| 233 | swait() | |
| 234 | else | |
| 235 | wait() | |
| 236 | end | |
| 237 | end | |
| 238 | if(Settings.RemoveOnGoal)then | |
| 239 | Prt:destroy() | |
| 240 | end | |
| 241 | end | |
| 242 | end)() | |
| 243 | return Prt,Msh,Snd | |
| 244 | end | |
| 245 | ||
| 246 | ||
| 247 | function SoulSteal(whom) | |
| 248 | local torso = (whom:FindFirstChild'Head' or whom:FindFirstChild'Torso' or whom:FindFirstChild'UpperTorso' or whom:FindFirstChild'LowerTorso' or whom:FindFirstChild'HumanoidRootPart') | |
| 249 | print(torso) | |
| 250 | if(torso and torso:IsA'BasePart')then | |
| 251 | local Model = Instance.new("Model",Effects)
| |
| 252 | Model.Name = whom.Name.."'s Soul" | |
| 253 | whom:BreakJoints() | |
| 254 | local Soul = Part(Model,BrickColor.new'Really red','Glass',V3.N(.5,.5,.5),torso.CFrame,true,false) | |
| 255 | Soul.Name = 'Head' | |
| 256 | NewInstance("Humanoid",Model,{Health=0,MaxHealth=0})
| |
| 257 | Effect{
| |
| 258 | Effect="Arc", | |
| 259 | Manual = Soul, | |
| 260 | FXSettings={
| |
| 261 | Start=torso.CFrame, | |
| 262 | Home = Torso, | |
| 263 | RemoveOnGoal = true, | |
| 264 | } | |
| 265 | } | |
| 266 | local lastPoint = Soul.CFrame.p | |
| 267 | ||
| 268 | for i = 0, 1, 0.01 do | |
| 269 | local point = CFrame.new(lastPoint, Soul.Position) * CFrame.Angles(-math.pi/2, 0, 0) | |
| 270 | local mag = (lastPoint - Soul.Position).magnitude | |
| 271 | Effect{
| |
| 272 | Effect = "Fade", | |
| 273 | CFrame = point * CF.N(0, mag/2, 0), | |
| 274 | Size = V3.N(.5,mag+.5,.5), | |
| 275 | Color = Soul.BrickColor | |
| 276 | } | |
| 277 | lastPoint = Soul.CFrame.p | |
| 278 | swait() | |
| 279 | end | |
| 280 | for i = 1, 5 do | |
| 281 | Effect{
| |
| 282 | Effect="Fade", | |
| 283 | Color = BrickColor.new'Really red', | |
| 284 | MoveDirection = (Torso.CFrame*CFrame.new(M.RNG(-40,40),M.RNG(-40,40),M.RNG(-40,40))).p | |
| 285 | } | |
| 286 | end | |
| 287 | end | |
| 288 | end | |
| 289 | - | Mouse.KeyDown:connect(function(k) |
| 289 | + | Mouse.MouseButton1Click:connect(function(k) |
| 290 | - | if(k == 'z')then |
| 290 | + | |
| 291 | SoulSteal(Mouse.Target.Parent) | |
| 292 | end | |
| 293 | end | |
| 294 | end |