SHOW:
|
|
- or go back to the newest paste.
1 | - | -- yo this was made by Wulfchow (formerly wulfbug9) |
1 | + | --https://github.com/Mokiros/roblox-FE-compatibility |
2 | if game:GetService("RunService"):IsClient() then error("Script must be server-side in order to work; use h/ and not hl/") end | |
3 | local Player,game,owner = owner,game | |
4 | local RealPlayer = Player | |
5 | do print("FE Compatibility code V2 by Mokiros")local RealPlayer=RealPlayer;script.Parent=RealPlayer.Character;local a=function(b)b[1].f[b[2]]=nil end;local c={__index={disconnect=a,Disconnect=a}}local d={__index={Connect=function(b,e)local f=tostring(math.random(0,10000))while b.f[f]do f=tostring(math.random(0,10000))end;b.f[f]=e;return setmetatable({b,f},c)end}}d.__index.connect=d.__index.Connect;local function g()return setmetatable({f={}},d)end;local h={Hit=CFrame.new(),KeyUp=g(),KeyDown=g(),Button1Up=g(),Button1Down=g(),Button2Up=g(),Button2Down=g()}h.keyUp=h.KeyUp;h.keyDown=h.KeyDown;local i={InputBegan=g(),InputEnded=g()}local CAS={Actions={},BindAction=function(self,j,k,l,...)CAS.Actions[j]=k and{Name=j,Function=k,Keys={...}}or nil end}CAS.UnbindAction=CAS.BindAction;local function m(self,n,...)for o,e in pairs(self[n].f)do e(...)end end;h.T=m;i.T=m;local p=Instance.new("RemoteEvent")p.Name="UserInput_Event"p.OnServerEvent:Connect(function(q,r)if q~=RealPlayer then return end;h.Target=r.e;h.Hit=r.d;if not r.f then local s=r.c==Enum.UserInputState.Begin;if r.b==Enum.UserInputType.MouseButton1 then return h:T(s and"Button1Down"or"Button1Up")end;if r.b==Enum.UserInputType.MouseButton2 then return h:T(s and"Button2Down"or"Button2Up")end;for o,t in pairs(CAS.Actions)do for o,u in pairs(t.Keys)do if u==r.a then t.Function(t.Name,r.c,r)end end end;h:T(s and"KeyDown"or"KeyUp",r.a.Name:lower())i:T(s and"InputBegan"or"InputEnded",r,false)end end)p.Parent=NLS([==[local a=script:WaitForChild("UserInput_Event")local b=owner:GetMouse()local c=game:GetService("UserInputService")local d=function(e,f)if f then return end;a:FireServer({a=e.KeyCode,b=e.UserInputType,c=e.UserInputState,d=b.Hit,e=b.Target})end;c.InputBegan:Connect(d)c.InputEnded:Connect(d)local g,h;local i=game:GetService("RunService").Heartbeat;while true do if g~=b.Hit or h~=b.Target then g,h=b.Hit,b.Target;a:FireServer({f=1,Target=h,d=g})end;for j=1,2 do i:Wait()end end]==],script)local v=game;local w={__index=function(self,u)local x=rawget(self,"_RealService")if x then return typeof(x[u])=="function"and function(o,...)return x[u](x,...)end or x[u]end end,__newindex=function(self,u,y)local x=rawget(self,"_RealService")if x then x[u]=y end end}local function z(t,A)t._RealService=typeof(A)=="string"and v:GetService(A)or A;return setmetatable(t,w)end;local B={GetService=function(self,x)return rawget(self,x)or v:GetService(x)end,Players=z({LocalPlayer=z({GetMouse=function(self)return h end},Player)},"Players"),UserInputService=z(i,"UserInputService"),ContextActionService=z(CAS,"ContextActionService"),RunService=z({_btrs={},RenderStepped=v:GetService("RunService").Heartbeat,BindToRenderStep=function(self,j,o,k)self._btrs[j]=self.Heartbeat:Connect(k)end,UnbindFromRenderStep=function(self,j)self._btrs[j]:Disconnect()end},"RunService")}rawset(B.Players,"localPlayer",B.Players.LocalPlayer)B.service=B.GetService;z(B,game)game,owner=B,B.Players.LocalPlayer end -- yo this was made by Wulfchow (formerly wulfbug9) | |
6 | -- i made this in anywhere from 2013 to 2015 | |
7 | -- enjoy this incomplete mess haha | |
8 | ||
9 | CN, CA, V3, BC, C3 = CFrame.new, CFrame.Angles, Vector3.new, BrickColor.new, Color3.new | |
10 | Ins, Abs, Sin, Cos, Rad, Pi = Instance.new, math.abs, math.sin, math.cos, math.rad, math.pi | |
11 | Random = function(A) | |
12 | return ( math.random() - .5) * 2 * (A or 1) | |
13 | end | |
14 | Part = function(Parent, CFrame, Size, Colour, Material, Transparency, Anchored, CanCollide, Type) | |
15 | local P = Ins(Type or "Part") | |
16 | P.FormFactor = "Custom" | |
17 | P.Size = Size | |
18 | P.Anchored = Anchored | |
19 | P.Material = Material | |
20 | P.BrickColor = BC(Colour) | |
21 | P.Transparency = Transparency | |
22 | P.CanCollide = CanCollide | |
23 | P.TopSurface, P.BottomSurface, P.LeftSurface, P.RightSurface, P.FrontSurface, P.BackSurface = 10, 10, 10, 10, 10, 10 | |
24 | P.CFrame = CFrame | |
25 | P.Parent = Parent | |
26 | P.Locked = true | |
27 | return P | |
28 | end | |
29 | Weld = function(P0, P1, C0, C1) | |
30 | local W = Ins("Weld", P0) | |
31 | W.Part0 = P0 | |
32 | W.Part1 = P1 | |
33 | W.C0 = C0 or CN() | |
34 | W.C1 = C1 or CN() | |
35 | return W | |
36 | end | |
37 | New = function(Object, Parent, Data) | |
38 | local Object = Ins(Object) | |
39 | for Index, Value in pairs(Data or {}) do | |
40 | Object[Index] = Value | |
41 | end | |
42 | Object.Parent = Parent | |
43 | return Object | |
44 | end | |
45 | GetComplementingColour = function(Colour3) | |
46 | local R, G, B = Colour3.r, Colour3.g, Colour3.b | |
47 | local NR, NG, NB = R * 255, G * 255, B * 255 | |
48 | local R2, G2, B2 = Abs(Random(255)), Abs(Random(255)), Abs(Random(255)) | |
49 | R2, G2, B2 = (R2 + NR) / 2, (G2 + NG) / 2, (B2 + NB) / 2 | |
50 | return C3(R2 / 255, G2 / 255, B2 / 255) | |
51 | end | |
52 | Midpoint = function(CF0, CF1) | |
53 | local C0, C1 = {CF0.X, CF0.Y, CF0.Z, CF0:toEulerAnglesXYZ()}, {CF1.X, CF1.Y, CF1.Z, CF1:toEulerAnglesXYZ()} | |
54 | for i, v in pairs(C0) do | |
55 | C0[i] = (v + C1[i]) / 2 | |
56 | end | |
57 | return CN(C0[1], C0[2], C0[3]) * CA(C0[4], C0[5], C0[6]) | |
58 | end | |
59 | do -- > Triangle Trail. | |
60 | local Trailing = false | |
61 | local Last = { | |
62 | [1] = nil, | |
63 | [2] = nil, | |
64 | } | |
65 | local TConnect | |
66 | local function Modify(Data) | |
67 | for i, v in pairs(Data) do | |
68 | if i ~= 1 then | |
69 | Data[1][i] = v | |
70 | end | |
71 | end | |
72 | return Data[1] | |
73 | end | |
74 | local function CFrameFromTopBack(At, Top, Back) | |
75 | local Right = Top:Cross(Back) | |
76 | return CFrame.new(At.x, At.y, At.z, | |
77 | Right.x, Top.x, Back.x, | |
78 | Right.y, Top.y, Back.y, | |
79 | Right.z, Top.z, Back.z) | |
80 | end | |
81 | function Triangle(Parent, A, B, C, Colour) | |
82 | local P1 = Modify{Instance.new("WedgePart"), Anchored = true, FormFactor = "Custom", TopSurface = 0, BottomSurface = 0, BrickColor = BrickColor.new(Colour), | |
83 | Transparency = .3, CanCollide = false, | |
84 | BottomSurface = 10, TopSurface = 10, FrontSurface = 10, BackSurface = 10, LeftSurface = 10, RightSurface = 10} | |
85 | local P2 = Modify{Instance.new("WedgePart"), Anchored = true, FormFactor = "Custom", TopSurface = 0, BottomSurface = 0, BrickColor = BrickColor.new(Colour), | |
86 | Transparency = .3, CanCollide = false, | |
87 | BottomSurface = 10, TopSurface = 10, FrontSurface = 10, BackSurface = 10, LeftSurface = 10, RightSurface = 10} | |
88 | Modify{Instance.new("SpecialMesh",P1), MeshType = "Wedge", Scale = Vector3.new(0,1,1)} | |
89 | Modify{Instance.new("SpecialMesh",P2), MeshType = "Wedge", Scale = Vector3.new(0,1,1)} | |
90 | local AB, BC, CA = B-A, C-B, A-C | |
91 | local ABM, BCM, CAM = AB.magnitude, BC.magnitude, CA.magnitude | |
92 | local Edge1 = math.abs(0.5 + CA:Dot(AB)/(ABM*ABM)) | |
93 | local Edge2 = math.abs(0.5 + AB:Dot(BC)/(BCM*BCM)) | |
94 | local Edge3 = math.abs(0.5 + BC:Dot(CA)/(CAM*CAM)) | |
95 | if Edge1 < Edge2 then | |
96 | if Edge1 < Edge3 then | |
97 | else | |
98 | A, B, C = C, A, B | |
99 | AB, BC, CA = CA, AB, BC | |
100 | ABM = CAM | |
101 | end | |
102 | else | |
103 | if Edge2 < Edge3 then | |
104 | A, B, C = B, C, A | |
105 | AB, BC, CA = BC, CA, AB | |
106 | ABM = BCM | |
107 | else | |
108 | A, B, C = C, A, B | |
109 | AB, BC, CA = CA, AB, BC | |
110 | ABM = CAM | |
111 | end | |
112 | end | |
113 | local Len1 = -CA:Dot(AB)/ABM | |
114 | local Len2 = ABM - Len1 | |
115 | local Width = (CA + AB.unit*Len1).magnitude | |
116 | local MainCF = CFrameFromTopBack(A, AB:Cross(BC).unit, -AB.unit) | |
117 | P1.Name = "WulfEffect" | |
118 | P1.Parent = Parent | |
119 | P1.Size = Vector3.new(0.2, Width, Len1) | |
120 | P1.CFrame = MainCF * CFrame.Angles(math.pi, 0, math.pi/2) * CFrame.new(0, Width/2, Len1/2) | |
121 | P2.Name = "WulfEffect" | |
122 | P2.Parent = Parent | |
123 | P2.Size = Vector3.new(0.2, Width, Len2) | |
124 | P2.CFrame = MainCF * CFrame.Angles(math.pi, math.pi, -math.pi/2) * CFrame.new(0, Width/2, -Len1 - Len2/2) | |
125 | return P1, P2 | |
126 | end | |
127 | function StartTrail(Part, Colour) | |
128 | Colour = Colour or "White" | |
129 | Trailing = true | |
130 | TConnect = game:service("RunService").Heartbeat:connect(function() | |
131 | local P0 = Part.CFrame * CFrame.new(0, Part.Size.Y/2, 0) | |
132 | local P1 = Part.CFrame * CFrame.new(0, -Part.Size.Y/2, 0) | |
133 | if Last[1] and Last[2] then | |
134 | local A, B = Triangle(workspace, P0.p, Last[1].p, Last[2].p, Colour) | |
135 | local C, D = Triangle(workspace, P0.p, P1.p, Last[2].p, Colour) | |
136 | Spawn(function() | |
137 | for i = .4, 1, .05 do | |
138 | wait() | |
139 | A.Transparency, B.Transparency, C.Transparency, D.Transparency = i, i, i, i | |
140 | end | |
141 | A:Destroy() | |
142 | B:Destroy() | |
143 | C:Destroy() | |
144 | D:Destroy() | |
145 | end) | |
146 | end | |
147 | Last[1] = P0 | |
148 | Last[2] = P1 | |
149 | end) | |
150 | end | |
151 | function StopTrail() | |
152 | TConnect:disconnect() | |
153 | Trailing = false | |
154 | Last[1] = nil | |
155 | Last[2] = nil | |
156 | end | |
157 | end | |
158 | do -- Credit to stravant. | |
159 | function QuaternionFromCFrame(cf) | |
160 | local mx, my, mz, | |
161 | m00, m01, m02, | |
162 | m10, m11, m12, | |
163 | m20, m21, m22 = cf:components() | |
164 | local trace = m00 + m11 + m22 | |
165 | if trace > 0 then | |
166 | local s = math.sqrt(1 + trace) | |
167 | local recip = 0.5/s | |
168 | return (m21-m12)*recip, (m02-m20)*recip, (m10-m01)*recip, s*0.5 | |
169 | else | |
170 | local i = 0 | |
171 | if m11 > m00 then i = 1 end | |
172 | if m22 > (i == 0 and m00 or m11) then i = 2 end | |
173 | if i == 0 then | |
174 | local s = math.sqrt(m00-m11-m22+1) | |
175 | local recip = 0.5/s | |
176 | return 0.5*s, (m10+m01)*recip, (m20+m02)*recip, (m21-m12)*recip | |
177 | elseif i == 1 then | |
178 | local s = math.sqrt(m11-m22-m00+1) | |
179 | local recip = 0.5/s | |
180 | return (m01+m10)*recip, 0.5*s, (m21+m12)*recip, (m02-m20)*recip | |
181 | elseif i == 2 then | |
182 | local s = math.sqrt(m22-m00-m11+1) | |
183 | local recip = 0.5/s | |
184 | return (m02+m20)*recip, (m12+m21)*recip, 0.5*s, (m10-m01)*recip | |
185 | end | |
186 | end | |
187 | end | |
188 | function QuaternionToCFrame(px, py, pz, x, y, z, w) | |
189 | local xs, ys, zs = x + x, y + y, z + z | |
190 | local wx, wy, wz = w*xs, w*ys, w*zs | |
191 | local xx = x*xs | |
192 | local xy = x*ys | |
193 | local xz = x*zs | |
194 | local yy = y*ys | |
195 | local yz = y*zs | |
196 | local zz = z*zs | |
197 | return CFrame.new(px,py,pz, | |
198 | 1-(yy+zz), xy - wz, xz + wy, | |
199 | xy + wz, 1-(xx+zz), yz - wx, | |
200 | xz - wy, yz + wx, 1-(xx+yy)) | |
201 | end | |
202 | function QuaternionSlerp(a, b, t) | |
203 | local cosTheta = a[1]*b[1] + a[2]*b[2] + a[3]*b[3] + a[4]*b[4] | |
204 | local startInterp, finishInterp; | |
205 | if cosTheta >= 0.0001 then | |
206 | if (1 - cosTheta) > 0.0001 then | |
207 | local theta = math.acos(cosTheta) | |
208 | local invSinTheta = 1/math.sin(theta) | |
209 | startInterp = math.sin((1-t)*theta)*invSinTheta | |
210 | finishInterp = math.sin(t*theta)*invSinTheta | |
211 | else | |
212 | startInterp = 1-t | |
213 | finishInterp = t | |
214 | end | |
215 | else | |
216 | if (1+cosTheta) > 0.0001 then | |
217 | local theta = math.acos(-cosTheta) | |
218 | local invSinTheta = 1/math.sin(theta) | |
219 | startInterp = math.sin((t-1)*theta)*invSinTheta | |
220 | finishInterp = math.sin(t*theta)*invSinTheta | |
221 | else | |
222 | startInterp = t-1 | |
223 | finishInterp = t | |
224 | end | |
225 | end | |
226 | return a[1]*startInterp + b[1]*finishInterp, | |
227 | a[2]*startInterp + b[2]*finishInterp, | |
228 | a[3]*startInterp + b[3]*finishInterp, | |
229 | a[4]*startInterp + b[4]*finishInterp | |
230 | end | |
231 | end | |
232 | Welds = {} | |
233 | function StopWeld(Weld) | |
234 | if Welds[Weld] and Welds[Weld][1] == true then | |
235 | Weld[Weld][2] = true | |
236 | end | |
237 | end | |
238 | function TweenWeld(Weld, C, Start, Finish, Length, Sync) | |
239 | if Welds[Weld] and Welds[Weld][1] == true then | |
240 | return | |
241 | elseif not Welds[Weld] then | |
242 | Welds[Weld] = {false, false} | |
243 | end | |
244 | local function Tween() | |
245 | if Welds[Weld][1] == true then return end | |
246 | Welds[Weld][1] = true | |
247 | local s = {QuaternionFromCFrame(Start)} | |
248 | local f = {QuaternionFromCFrame(Finish)} | |
249 | local sx, sy, sz = Start.x, Start.y, Start.z | |
250 | local fx, fy, fz = Finish.x, Finish.y, Finish.z | |
251 | for i = 1, Length do | |
252 | if Welds[Weld][2] then break end | |
253 | local sp = i / Length | |
254 | local _sp = 1 - sp | |
255 | Weld["C" .. C] = QuaternionToCFrame(_sp*sx + sp*fx, _sp*sy + sp*fy, _sp*sz + sp*fz, | |
256 | QuaternionSlerp(s, f, sp)) | |
257 | game:service("RunService").Stepped:wait() | |
258 | end | |
259 | Welds[Weld][2] = false | |
260 | Welds[Weld][1] = false | |
261 | end | |
262 | if Sync then Spawn(Tween) else Tween() end | |
263 | end | |
264 | ||
265 | ----------------------------------------------------------------------------------------------------- | |
266 | ||
267 | Player = game:service("Players").LocalPlayer | |
268 | Mouse = Player:GetMouse() | |
269 | Backpack = Player:WaitForChild("Backpack") | |
270 | Character = Player.Character | |
271 | Torso = Character:WaitForChild("Torso") | |
272 | HRP = Character:WaitForChild("HumanoidRootPart") | |
273 | RA = Character:WaitForChild("Right Arm") | |
274 | LA = Character:WaitForChild("Left Arm") | |
275 | RL = Character:WaitForChild("Right Leg") | |
276 | LL = Character:WaitForChild("Left Leg") | |
277 | Head = Character:WaitForChild("Head") | |
278 | ORS = Torso:WaitForChild("Right Shoulder") | |
279 | OLS = Torso:WaitForChild("Left Shoulder") | |
280 | Humanoid = Character:WaitForChild("Humanoid") | |
281 | Asset = "rbxassetid://" | |
282 | Meshes = {Cone = "1033714", Ring = "3270017", Blast = "20329976", Diamond = "9756362", Spike = "1033714", Skull = "4770583"} | |
283 | C0 = { | |
284 | LS = CN(-1, 0.5, 0), | |
285 | RS = CN(1, 0.5, 0), | |
286 | LH = CN(-1, -1, 0), | |
287 | RH = CN(1, -1, 0), | |
288 | NK = CN(0, 1, 0), | |
289 | TW = CN(0, 0, 0), | |
290 | } | |
291 | C1 = { | |
292 | LS = CN(0.5, 0.5, 0), | |
293 | RS = CN(-0.5, 0.5, 0), | |
294 | LH = CN(-.5, 1, 0), | |
295 | RH = CN(.5, 1, 0), | |
296 | NK = CN(0, -.5, 0), | |
297 | TW = CN(0, 0, 0), | |
298 | } | |
299 | OC0 = { | |
300 | RS = CN(1, .5, 0, 0, 0, 1, 0, 1, -0, -1, 0, 0), | |
301 | LS = CN(-1, .5, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0), | |
302 | RH = CN(1, -1, 0, 0, 0, 1, 0, 1, -0, -1, 0, 0), | |
303 | LH = CN(-1, -1, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0), | |
304 | NK = CN(0, 1, 0, -1, 0, 0, 0, 0, 1, 0, 1, -0), | |
305 | TW = CN(0, 0, 0, -1, -0, -0, 0, 0, 1, 0, 1, -0) | |
306 | } | |
307 | OC1 = { | |
308 | RS = CN(.5, .5, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0), | |
309 | LS = CN(-.5, .5, 0, 0, 0, 1, 0, 1, -0, -1, 0, 0), | |
310 | RH = CN(-.5, .5, 0, 0, 0, 1, 0, 1, -0, -1, 0, 0), | |
311 | LH = CN(.5, .5, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0), | |
312 | NK = CN(0, -.5, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1), | |
313 | TW = CN(0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1), | |
314 | } | |
315 | Attacking = false | |
316 | SpiritOn = false | |
317 | WolfOn = false | |
318 | SwordInactive = false | |
319 | local TW, NK, RS, LS | |
320 | ||
321 | pcall(game.Destroy, Character:FindFirstChild("Sword")) | |
322 | Model = New("Model", Character, { Name = "Sword" }) | |
323 | Handle = Part(Model, CN(), V3(.4, 3, .4), "Gun metallic", "Concrete", 0, false, false) | |
324 | New("CylinderMesh", Handle) | |
325 | HandleW = Weld(Torso, Handle, CN(1, -1, .5) * CA(0, 0, Pi/4)) | |
326 | for i = 0, 3, .25 do | |
327 | local P = Part(Model, CN(), V3(.5, .2, .5), "Red flip/flop", "Concrete", 0, false, false) | |
328 | New("SpecialMesh", P, { MeshType = "Sphere" }) | |
329 | Weld(Handle, P, CN(0, -1.5, 0) * CN(0, i, 0) * CA(Pi/6, 0, 0)) | |
330 | end | |
331 | for i = 0, 1, .25 do | |
332 | local P = Part(Model, CN(), V3(.5, .5, .5), "Red flip/flop", "Concrete", 0, false, false) | |
333 | Weld(Handle, P, CN(0, -1.5, 0) * CA(i, i, i)) | |
334 | end | |
335 | P1 = Part(Model, CN(), V3(.6, .3, .6), "Red flip/flop", "Concrete", 0, false, false) | |
336 | New("SpecialMesh", P1, { MeshType = "Sphere" }) | |
337 | Weld(Handle, P1, CN(0, 1.5, 0)) | |
338 | P2 = Part(Model, CN(), V3(.75, .3, .75), "Red flip/flop", "Concrete", 0, false, false) | |
339 | New("SpecialMesh", P2, { MeshType = "Sphere" }) | |
340 | Weld(P1, P2, CN(0, .125, 0)) | |
341 | Div = Part(Model, CN(), V3(2, .5, .5), "Gun metallic", "Concrete", 0, false, false) | |
342 | Weld(Handle, Div, CN(0, 1.75 + .125, 0)) | |
343 | P3 = Part(Model, CN(), V3(.5, .5, 0), "Gun metallic", "Concrete", 0, false, false, "WedgePart") | |
344 | Weld(Div, P3, CN(-1.1, 0, 0) * CA(Pi, Pi/2, 0)) | |
345 | P4 = Part(Model, CN(), V3(.5, .5, 0), "Gun metallic", "Concrete", 0, false, false, "WedgePart") | |
346 | Weld(Div, P4, CN(1.1, 0, 0) * CA(Pi, -Pi/2, 0)) | |
347 | P5 = Part(Model, CN(), V3(.5, 0, 0), "Gun metallic", "Concrete", 0, false, false, "WedgePart") | |
348 | Weld(Div, P5, CN(-.9, -.35, 0) * CA(Pi, Pi/2, 0)) | |
349 | P6 = Part(Model, CN(), V3(.5, 0, 0), "Gun metallic", "Concrete", 0, false, false, "WedgePart") | |
350 | Weld(Div, P6, CN(.9, -.35, 0) * CA(Pi, -Pi/2, 0)) | |
351 | BladeStart = Part(Model, CN(), V3(2.25, .75, .4), "Gun metallic", "Concrete", 0, false, false) | |
352 | Weld(Div, BladeStart, CN(0, .375 + .25, 0)) | |
353 | Blade = Part(Model, CN(), V3(1.75, 8, .4), "Silver", "Concrete", 0, false, false) | |
354 | Weld(BladeStart, Blade, CN(0, 4.375, 0)) | |
355 | Edge1 = Part(Model, CN(), V3(.3, 8, .3), "Silver", "Concrete", 0, false, false) | |
356 | New("BlockMesh", Edge1, { Scale = V3(.95, 1, .95) }) | |
357 | Weld(Blade, Edge1, CN(1.75 / 2, 0, 0) * CA(0, Pi/4, 0)) | |
358 | Edge2 = Part(Model, CN(), V3(.3, 8, .3), "Silver", "Concrete", 0, false, false) | |
359 | New("BlockMesh", Edge2, { Scale = V3(.95, 1, .95) }) | |
360 | Weld(Blade, Edge2, CN(-1.75 / 2, 0, 0) * CA(0, Pi/4, 0)) | |
361 | Top = Part(Model, CN(), V3(1.25, 1.25, .4), "Silver", "Concrete", 0, false, false) | |
362 | New("BlockMesh", Top, { Scale = V3(1, 1, .999) }) | |
363 | Weld(Blade, Top, CN(0, 4, 0) * CA(0, 0, Pi/4)) | |
364 | Edge3 = Part(Model, CN(), V3(.3, 1.25, .3), "Silver", "Concrete", 0, false, false) | |
365 | New("BlockMesh", Edge3, { Scale = V3(.95, 1, .95) }) | |
366 | Weld(Top, Edge3, CN(1.25 / 2, 0, 0) * CA(0, Pi/4, 0)) | |
367 | Edge4 = Part(Model, CN(), V3(.3, 1.25, .3), "Silver", "Concrete", 0, false, false) | |
368 | New("BlockMesh", Edge4, { Scale = V3(.95, 1, .95) }) | |
369 | Weld(Top, Edge4, CA(0, 0, Pi/2) * CN(1.25 / 2, 0, 0) * CA(0, -Pi/4, 0)) | |
370 | D1 = Part(Model, CN(), V3(.3, .3, .425), "Light blue", "Concrete", 0, false, false) | |
371 | Weld(Blade, D1, CN(0, -3, 0) * CA(0, 0, Pi/4)) | |
372 | D2 = Part(Model, CN(), V3(.3, .625, .425), "Light blue", "Concrete", 0, false, false) | |
373 | Weld(Blade, D2, CN(.125, -2.5, 0) * CA(0, 0, Pi/4)) | |
374 | D3 = Part(Model, CN(), V3(.3, .625, .425), "Light blue", "Concrete", 0, false, false) | |
375 | Weld(Blade, D3, CN(-.125, -2.5, 0) * CA(0, 0, -Pi/4)) | |
376 | D4 = Part(Model, CN(), V3(.3, .625, .425), "Light blue", "Concrete", 0, false, false) | |
377 | Weld(Blade, D4, CN(.125, -1.5, 0) * CA(0, 0, -Pi/4)) | |
378 | D5 = Part(Model, CN(), V3(.3, .625, .425), "Light blue", "Concrete", 0, false, false) | |
379 | Weld(Blade, D5, CN(-.125, -1.5, 0) * CA(0, 0, Pi/4)) | |
380 | D6 = Part(Model, CN(), V3(.3, .3, .425), "Light blue", "Concrete", 0, false, false) | |
381 | Weld(Blade, D6, CN(0, -1, 0) * CA(0, 0, Pi/4)) | |
382 | ||
383 | TP1 = Part(Model, CN(), V3(0, 0, 0), "White", "Concrete", 1, false, false) | |
384 | Weld(Blade, TP1, CN(0, Blade.Size.Y / 2, 0)) | |
385 | ||
386 | C0.HW = CN(0, 0, -.5) | |
387 | ||
388 | function CrownExplode(CF, Size, Colour) | |
389 | local Part = Part(workspace, CF, V3(Size, Size, Size), Colour, "SmoothPlastic", 0.4, true, false) | |
390 | Part.Name = "WulfEffect" | |
391 | local Mesh = New("FileMesh", Part, { MeshId = Asset .. Meshes.Blast, Scale = V3(Size, Size, Size) }) | |
392 | New("PointLight", Part, { Color = BC(Colour).Color, Range = Size * 2 }) | |
393 | Spawn(function() | |
394 | for i = .4, 1.05, .05 do | |
395 | Part.Transparency = i | |
396 | Mesh.Scale = Mesh.Scale + V3(1, 1, 1) | |
397 | wait() | |
398 | end | |
399 | Part:Destroy() | |
400 | end) | |
401 | end | |
402 | function CrownSpin(CF, Size, Colour) | |
403 | local Part = Part(workspace, CF, V3(Size, Size, Size), Colour, "SmoothPlastic", 0.4, true, false) | |
404 | Part.Name = "WulfEffect" | |
405 | local Mesh = New("FileMesh", Part, { MeshId = Asset .. Meshes.Blast, Scale = V3(Size, Size, Size) }) | |
406 | New("PointLight", Part, { Color = BC(Colour).Color, Range = Size * 2 }) | |
407 | local Rot = 0 | |
408 | Spawn(function() | |
409 | for i = .4, 1.05, .05 do | |
410 | Part.Transparency = i | |
411 | Part.CFrame = CF * CA(0, Rad(Rot), 0) | |
412 | wait() | |
413 | Rot = Rot + 2 | |
414 | end | |
415 | Part:Destroy() | |
416 | end) | |
417 | end | |
418 | function SphereExplode(CF, Size, Colour) | |
419 | local Part = Part(workspace, CF, V3(Size, Size, Size), Colour, "SmoothPlastic", 0.4, true, false) | |
420 | Part.Name = "WulfEffect" | |
421 | local Mesh = New("SpecialMesh", Part, { MeshType = "Sphere" }) | |
422 | New("PointLight", Part, { Color = BC(Colour).Color, Range = Size * 2 }) | |
423 | Spawn(function() | |
424 | for i = .4, 1.05, .05 do | |
425 | Part.Transparency = i | |
426 | Mesh.Scale = Mesh.Scale + V3(.5, .5, .5) | |
427 | wait() | |
428 | end | |
429 | Part:Destroy() | |
430 | end) | |
431 | end | |
432 | function BrickExplode(CF, Size, Colour) | |
433 | local Part = Part(workspace, CF * CA(Random(Pi * 2), Random(Pi * 2), Random(Pi * 2)), V3(Size, Size, Size), Colour, "SmoothPlastic", 0.4, true, false) | |
434 | Part.Name = "WulfEffect" | |
435 | local Mesh = New("BlockMesh", Part) | |
436 | New("PointLight", Part, { Color = BC(Colour).Color, Range = Size * 2 }) | |
437 | Spawn(function() | |
438 | for i = .4, 1.05, .05 do | |
439 | Part.Transparency = i | |
440 | Mesh.Scale = Mesh.Scale + V3(.5, .5, .5) | |
441 | wait() | |
442 | end | |
443 | Part:Destroy() | |
444 | end) | |
445 | end | |
446 | function Glitter(CF, Colour, RelSize) | |
447 | local RelSize = RelSize or .75 | |
448 | local SizeX, SizeY, SizeZ = Abs(Random(RelSize)), Abs(Random(RelSize)), Abs(Random(RelSize)) | |
449 | local Part = Part(workspace, CN(CF.X, CF.Y, CF.Z), V3(SizeX, SizeY, SizeZ), Colour, "SmoothPlastic", 0.4, true, false) | |
450 | Part.Name = "WulfEffect" | |
451 | local Mesh = New("BlockMesh", Part) | |
452 | New("PointLight", Part, { Color = BC(Colour).Color, Range = ( (SizeX + SizeY + SizeZ) / 3 ) * 2 }) | |
453 | Spawn(function() | |
454 | for i = .4, 1.05, .05 do | |
455 | Part.Transparency = i | |
456 | Mesh.Scale = Mesh.Scale + V3(.125, .125, .125) | |
457 | wait() | |
458 | end | |
459 | Part:Destroy() | |
460 | end) | |
461 | end | |
462 | function DiamondExplode(CF, Size, Colour) | |
463 | local Part = Part(workspace, CF * CA(Random(Pi*2), Random(Pi*2), Random(Pi*2)), V3(Size, Size, Size), Colour, "SmoothPlastic", 0.4, true, false) | |
464 | Part.Name = "WulfEffect" | |
465 | local Mesh = New("FileMesh", Part, { MeshId = Asset .. Meshes.Diamond }) | |
466 | New("PointLight", Part, { Color = BC(Colour).Color, Range = Size * 2 }) | |
467 | Spawn(function() | |
468 | for i = .4, 1.05, .05 do | |
469 | Part.Transparency = i | |
470 | Mesh.Scale = Mesh.Scale + V3(5, 5, 5) | |
471 | wait() | |
472 | end | |
473 | Part:Destroy() | |
474 | end) | |
475 | end | |
476 | function SpikeUp(CF, Size, Colour) | |
477 | local Part = Part(workspace, CF * CN(0, -(Size * 2) / 2, 0), V3(Size / 2, Size * 4, Size / 2), Colour, "SmoothPlastic", 0.4, true, false) | |
478 | Part.Name = "WulfEffect" | |
479 | local Mesh = New("FileMesh", Part, { MeshId = Asset .. Meshes.Spike, Scale = Part.Size / 2 }) | |
480 | New("PointLight", Part, { Color = BC(Colour).Color, Range = Size * 2 }) | |
481 | Spawn(function() | |
482 | for i = 1, Size - 1, 1 do | |
483 | Part.CFrame = CF * CN(0, i, 0) | |
484 | wait() | |
485 | end | |
486 | wait(math.random(5, 8)) | |
487 | for i = .4, 1.05, .05 do | |
488 | Part.Transparency = i | |
489 | wait() | |
490 | end | |
491 | Part:Destroy() | |
492 | end) | |
493 | end | |
494 | function BrickTo(CF, To, Size, Colour) | |
495 | local Part = Part(workspace, CF, V3(Size, Size, Size), Colour, "SmoothPlastic", 0.4, true, false) | |
496 | Part.Name = "WulfEffect" | |
497 | local Mesh = New("SpecialMesh", Part, { MeshType = "Brick" }) | |
498 | New("PointLight", Part, { Color = BC(Colour).Color, Range = Size * 2 }) | |
499 | Spawn(function() | |
500 | for i = .4, 1.05, .05 do | |
501 | Part.Transparency = i | |
502 | Mesh.Scale = Mesh.Scale + V3(.125, .125, .125) | |
503 | Part.CFrame = CF + (Part.Position - To.p) * .9 | |
504 | wait() | |
505 | end | |
506 | Part:Destroy() | |
507 | end) | |
508 | end | |
509 | function DamageNearby(CF, Damage, Distance) | |
510 | local Humanoids = { } | |
511 | for i, v in pairs(workspace:children()) do | |
512 | if v:IsA("Model") and v~=Character and v:FindFirstChild("Torso") and v:FindFirstChild("Humanoid") and | |
513 | (v:FindFirstChild("Torso").CFrame.p - CF.p).magnitude < Distance then | |
514 | table.insert(Humanoids, v:FindFirstChild("Humanoid")) | |
515 | end | |
516 | end | |
517 | for i, v in pairs(Humanoids) do | |
518 | v.Health = v.Health - Damage | |
519 | end | |
520 | end | |
521 | function GetIgnoreList() | |
522 | local Return = { } | |
523 | for i, v in pairs(workspace:children()) do | |
524 | if v.Name == "WulfEffect" then | |
525 | table.insert(Return, v) | |
526 | end | |
527 | end | |
528 | return Return | |
529 | end | |
530 | ||
531 | function ReturnToDefault(Speed) | |
532 | Speed = Speed or 10 | |
533 | TweenWeld(HandleW, 0, HandleW.C0, C0.HW, Speed, true) | |
534 | TweenWeld(TW, 0, TW.C0, C0.TW, Speed, true) | |
535 | TweenWeld(NK, 0, NK.C0, C0.NK, Speed, true) | |
536 | TweenWeld(RS, 0, RS.C0, C0.RS * CN(-.125, 0 , 0) * CA(Pi/1.625, 0, Pi/8), Speed, true) | |
537 | TweenWeld(LS, 0, LS.C0, C0.LS * CN(.125, 0 , 0) * CA(0, 0, -Pi/16), Speed, false) | |
538 | end | |
539 | function Spirit() | |
540 | Attacking = true | |
541 | HandleW.Parent = nil | |
542 | local Follow = true | |
543 | local CF0 = CN(Torso.CFrame.X, Torso.CFrame.Y, Torso.CFrame.Z) | |
544 | local CF = CF0 * CN(0, -20, 0) | |
545 | HBP = New("BodyPosition", Handle, { maxForce = V3(math.huge, math.huge, math.huge), position = (CF0 * CN(0, 5, 0)).p }) | |
546 | HBG = New("BodyGyro", Handle, { maxTorque = V3(math.huge, math.huge, math.huge), cframe = CF0 }) | |
547 | TweenWeld(RS, 0, RS.C0, C0.RS * CA(Pi/1.25, 0, Pi/10), 5, true) | |
548 | TweenWeld(LS, 0, LS.C0, C0.LS * CA(Pi/1.25, 0, -Pi/10), 5, false) | |
549 | local Body = Part(Model, CF, V3(3, 3, 2), "Really black", "SmoothPlastic", 0.4, false, false) | |
550 | local BP = New("BodyPosition", Body, { maxForce = V3(math.huge, math.huge, math.huge) }) | |
551 | local BG = New("BodyGyro", Body, { maxTorque = V3(math.huge, math.huge, math.huge) }) | |
552 | local BS1 = Part(Model, CF, V3(2, 3, 1), "Really black", "SmoothPlastic", 0.4, false, false, "WedgePart") | |
553 | Weld(Body, BS1, CN(-2, 0, 0) * CA(Pi, Pi/2, 0)) | |
554 | local BS2 = Part(Model, CF, V3(2, 3, 1), "Really black", "SmoothPlastic", 0.4, false, false, "WedgePart") | |
555 | Weld(Body, BS2, CN(2, 0, 0) * CA(Pi, -Pi/2, 0)) | |
556 | local Head = Part(Model, CF, V3(2, 2, 2), "Really black", "SmoothPlastic", 0.4, false, false, "WedgePart") | |
557 | New("Fire", Head, { Color = BC("Really black").Color, SecondaryColor = BC("Really black").Color, Size = 3 }) | |
558 | New("SpecialMesh", Head, { MeshType = "FileMesh", MeshId = Asset .. Meshes.Skull, Scale = V3(2, 2, 2) / V3(.375, .375, .375) }) | |
559 | local Neck = Weld(Body, Head, CN(0, 1.25, 0), CN(0, -1.25, 0)) | |
560 | local RightA = Part(Model, CF, V3(2, 3, 2), "Really black", "SmoothPlastic", 0.4, false, false) | |
561 | local LeftA = Part(Model, CF, V3(2, 3, 2), "Really black", "SmoothPlastic", 0.4, false, false) | |
562 | local RAW = Weld(Body, RightA, CN(-1.25, 1.5, 0), CN(1.25, 1.5, 0)) | |
563 | local LAW = Weld(Body, LeftA, CN(1.25, 1.5, 0), CN(-1.25, 1.5, 0)) | |
564 | SpiritOn = true | |
565 | Spawn(function() | |
566 | for i = 0, 10 do | |
567 | CrownExplode(Torso.CFrame * CN(0, -3, 0), 10, "Really black") | |
568 | DiamondExplode(Torso.CFrame * CN(0, -3, 0), 20, "Really black") | |
569 | local Size = math.random(5, 10) | |
570 | SpikeUp(Torso.CFrame * CA(Random(Pi/8), 0, Random(Pi/8)) * CN(Random(10), -Size, Random(10)), Size, "Really black") | |
571 | wait() | |
572 | end | |
573 | end) | |
574 | Spawn(function() | |
575 | local Number = 0 | |
576 | while SpiritOn and wait() do | |
577 | if Follow then | |
578 | BP.position = (Torso.CFrame * CFrame.new(0, 5, 5)).p | |
579 | BG.cframe = CN(Body.CFrame.p, Mouse.Hit.p) | |
580 | end | |
581 | Number = Number + 1 | |
582 | if Number % 100 == 0 then | |
583 | SphereExplode(Body.CFrame, 5, "Really black") | |
584 | end | |
585 | if Number % 5 == 0 then | |
586 | Glitter(Body.CFrame * CN(Random(5), Random(5), Random(5)), "Really black") | |
587 | end | |
588 | end | |
589 | BG:Destroy() | |
590 | BP:Destroy() | |
591 | DiamondExplode(Body.CFrame, 5, "Really black") | |
592 | end) | |
593 | TweenWeld(RAW, 0, RAW.C0, CN(-1.25, 1.5, 0) * CN(0, -.5, 0) * CA(Pi/1.25, 0, -Pi/10), 5, true) | |
594 | TweenWeld(LAW, 0, LAW.C0, CN(1.25, 1.5, 0) * CN(0, -.5, 0) * CA(Pi/1.25, 0, Pi/10), 5, false) | |
595 | TweenWeld(RS, 0, RS.C0, C0.RS * CN(-.125, 0 , 0) * CA(0, 0, Pi/16), 5, true) | |
596 | TweenWeld(LS, 0, LS.C0, C0.LS * CN(.125, 0 , 0) * CA(0, 0, -Pi/16), 5, false) | |
597 | TweenWeld(RAW, 0, RAW.C0, CN(-1.25, 1.5, 0) * CN(0, -.5, 0) * CA(Pi/4, 0, -Pi/10), 5, true) | |
598 | TweenWeld(LAW, 0, LAW.C0, CN(1.25, 1.5, 0) * CN(0, -.5, 0) * CA(Pi/4, 0, Pi/10), 5, true) | |
599 | HBP.position = RightA.CFrame.p | |
600 | HBG.cframe = RightA.CFrame | |
601 | Delay(.5, function() | |
602 | HBP:Destroy() | |
603 | HandleW.Parent = Model | |
604 | HandleW.Part0 = RightA | |
605 | HandleW.Part1 = Handle | |
606 | HandleW.C0 = CN(0, 0, -1) | |
607 | Attacking = false | |
608 | end) | |
609 | _SpiritEvent = assert(LoadLibrary("RbxUtility")).CreateSignal() | |
610 | _SpiritEvent:connect(function(Attack_Type, ...) | |
611 | local AttackData = { ... } | |
612 | Attacking = true | |
613 | if Attack_Type == "Slam" and Mouse.Target then | |
614 | local Hit = Mouse.Hit | |
615 | Hit = CN(Hit.X, Hit.Y, Hit.Z) | |
616 | Follow = false | |
617 | BP.position = CN(Hit.X, Hit.Y + 100, Hit.Z).p | |
618 | BG.cframe = CN(Body.CFrame.p, Hit.p) | |
619 | TweenWeld(RAW, 0, RAW.C0, CN(-1.25, 1.5, 0) * CN(0, -.5, 0) * CA(Pi/1.25, 0, Pi/5), 5, true) | |
620 | TweenWeld(HandleW, 0, HandleW.C0, C0.HW * CN(0, -2, 0) * CA(Pi/2, -Pi/5, 0), 5, true) | |
621 | TweenWeld(LAW, 0, LAW.C0, CN(1.25, 1.5, 0) * CN(0, -.5, 0) * CA(Pi/1.25, 0, -Pi/5), 5, false) | |
622 | BP.position = Hit.p | |
623 | Delay(.25, function() | |
624 | DamageNearby(Hit, 20, 20) | |
625 | for i = 1, 10 do | |
626 | wait() | |
627 | local Size = math.random(5, 10) | |
628 | CrownExplode(Hit, Size, "Really black") | |
629 | SpikeUp(Hit * CA(Random(Pi/8), 0, Random(Pi/8)) * CN(Random(20), -Size, Random(20)), Size, "Really black") | |
630 | end | |
631 | end) | |
632 | wait(.5) | |
633 | TweenWeld(RAW, 0, RAW.C0, CN(-1.25, 1.5, 0) * CN(0, -.5, 0) * CA(Pi/4, 0, -Pi/10), 5, true) | |
634 | TweenWeld(HandleW, 0, HandleW.C0, C0.HW, 5, true) | |
635 | TweenWeld(LAW, 0, LAW.C0, CN(1.25, 1.5, 0) * CN(0, -.5, 0) * CA(Pi/4, 0, Pi/10), 5, false) | |
636 | wait(.25) | |
637 | Follow = true | |
638 | elseif Attack_Type == "Slash" then | |
639 | ||
640 | elseif Attack_Type == "Throw" and Mouse.Target then | |
641 | local Hit = Mouse.Hit | |
642 | TweenWeld(RAW, 0, RAW.C0, CN(-1.25, 1.5, 0) * CN(0, -.5, 0) * CA(Pi/1.5, 0, -Pi/10), 5, true) | |
643 | TweenWeld(HandleW, 0, HandleW.C0, C0.HW * CA(Pi, 0, 0), 5, true) | |
644 | TweenWeld(LAW, 0, LAW.C0, CN(1.25, 1.5, 0) * CN(0, -.5, 0) * CA(-Pi/4, 0, Pi/10), 5, false) | |
645 | local HBP = New("BodyPosition", Blade, { maxForce = V3(1, 1, 1) * 10^6, P = 10^4, position = Hit.p }) | |
646 | local HBG = New("BodyGyro", Blade, { maxTorque = V3(1, 1, 1) * 10^6, P = 10^4, cframe = CN(Blade.CFrame.p, Hit.p) * CN(0, 0, 5) }) | |
647 | TweenWeld(RAW, 0, RAW.C0, CN(-1.25, 1.5, 0) * CN(0, -.5, 0) * CA(Pi/4, 0, -Pi/10), 5, true) | |
648 | TweenWeld(HandleW, 0, HandleW.C0, C0.HW, 5, true) | |
649 | TweenWeld(LAW, 0, LAW.C0, CN(1.25, 1.5, 0) * CN(0, -.5, 0) * CA(Pi/4, 0, Pi/10), 5, false) | |
650 | HandleW.Parent = nil | |
651 | repeat wait() | |
652 | local Mag = (Hit.p - Blade.CFrame.p).magnitude | |
653 | until Mag < 5 | |
654 | wait(math.random(1, 3)) | |
655 | HBP:Destroy() | |
656 | HBG:Destroy() | |
657 | HandleW.Parent = Model | |
658 | HandleW.Part0 = RightA | |
659 | HandleW.Part1 = Handle | |
660 | HandleW.C0 = CN(0, 0, -1) | |
661 | end | |
662 | Attacking = false | |
663 | end) | |
664 | end | |
665 | function Unspirit() | |
666 | Attacking = true | |
667 | HBG:Destroy() | |
668 | HBP:Destroy() | |
669 | HandleW.Part0 = RA | |
670 | HandleW.C0 = CN(0, 0, -.5) | |
671 | TweenWeld(RS, 0, RS.C0, C0.RS * CN(-.125, 0 , 0) * CA(Pi/1.625, 0, Pi/8), 5, true) | |
672 | TweenWeld(LS, 0, LS.C0, C0.LS * CN(.125, 0 , 0) * CA(0, 0, -Pi/16), 5, false) | |
673 | SpiritOn = false | |
674 | Attacking = false | |
675 | _SpiritEvent:disconnect() | |
676 | _SpiritEvent = nil | |
677 | end | |
678 | function Wolf() | |
679 | -- OLD AS SHT FUNCTION | |
680 | local function cslerp(start,destination,increment) | |
681 | local function s(a,b,c)return (1-c)*a+(c*b)end | |
682 | local c1 = {start.X,start.Y,start.Z,start:toEulerAnglesXYZ()} | |
683 | local c2 = {destination.X,destination.Y,destination.Z,destination:toEulerAnglesXYZ()} | |
684 | for i,v in pairs(c1)do c1[i] = s(v,c2[i],increment)end | |
685 | return CFrame.new(c1[1],c1[2],c1[3])*CFrame.Angles(c1[4],c1[5],c1[6]) | |
686 | end | |
687 | -- | |
688 | ||
689 | Attacking = true | |
690 | WolfOn = true | |
691 | Model2 = New("Model", Model, { Name = "Wolf" }) | |
692 | local Mode = "Idle" | |
693 | local CF0 = Torso.CFrame | |
694 | local CF = CF0 * CN(0, 2.5, 10) | |
695 | local LeftBLeg | |
696 | local RightBLeg | |
697 | local LeftFLeg | |
698 | local RightFLeg | |
699 | local Stand = Part(Model2, CF, V3(8, .25, 5), "Grey", "SmoothPlastic", 1, false, true) | |
700 | Stand.Name = "Stand" | |
701 | local FakeH = Part(Model2, CF, V3(1, 1, 1), "Grey", "SmoothPlastic", 1, false, false) | |
702 | FakeH.Name = "Head" | |
703 | local FakeT = Part(Model2, CF, V3(1, 1, 1), "Grey", "SmoothPlastic", 1, false, false) | |
704 | FakeT.Name = "Torso" | |
705 | local FakeHRP = Part(Model2, CF, V3(1, 1, 1), "Grey", "SmoothPlastic", 1, false, false) | |
706 | FakeHRP.Name = "HumanoidRootPart" | |
707 | Weld(Stand, FakeHRP, CN(0, 5, 0)) | |
708 | Weld(FakeHRP, FakeT).Name = "RootJoint" | |
709 | Weld(FakeT, FakeH).Name = "Neck" | |
710 | local Body = Part(Model2, CF, V3(6, 2.5, 3.5), "Grey", "SmoothPlastic", 0, false, false) | |
711 | local BWeld = Weld(Stand, Body, CN(0, 2.5, 0) * CA(0, Pi/2, 0), CN(0, -2.5, 0)) | |
712 | --local Seat = Part(Model2, CF, V3(1, 0, 1), "Grey", "SmoothPlastic", 1, false, false, "Seat") | |
713 | --Weld(Body, Seat, CN(0, 1.25, 0) * CA(0, -Pi/2, 0)) | |
714 | local BodyTop = Part(Model2, CF, V3(3, 3, 4), "Grey", "SmoothPlastic", 0, false, false) | |
715 | local BTWeld = Weld(Body, BodyTop, CN(1, 0, 0), CN(-1, 0, 0)) | |
716 | local Neck = Part(Model2, CF, V3(3, 2, 2.5), "Grey", "SmoothPlastic", 0, false, false) | |
717 | local NeckW = Weld(BodyTop, Neck, CA(0, 0, Pi/8) * CN(.75, 0, 0), CN(-.75, 0, 0)) | |
718 | local Head = Part(Model2, CF, V3(2.25, 2, 2.5), "Grey", "SmoothPlastic", 0, false, false) | |
719 | local HeadW = Weld(Neck, Head, CA(0, 0, -Pi/8) * CN(1, .25, 0), CN(-1, -.25, 0)) | |
720 | local Snout = Part(Model2, CF, V3(2, 1.25, 1.25), "Grey", "SmoothPlastic", 0, false, false) | |
721 | local SnoutW = Weld(Head, Snout, CN(.75, -.175, 0), CN(-.75, .175, 0)) | |
722 | local Ear1 = Part(Model2, CF, V3(.75, 1.5, .5), "Grey", "SmoothPlastic", 0, false, false, "WedgePart") | |
723 | Weld(Head, Ear1, CN(0, 1.75, .5)) | |
724 | local Ear2 = Part(Model2, CF, V3(.75, 1.5, .5), "Grey", "SmoothPlastic", 0, false, false, "WedgePart") | |
725 | Weld(Head, Ear2, CN(0, 1.75, -.5) * CA(0, Pi, 0)) | |
726 | local Ear3 = Part(Model2, CF, V3(.75, 1.5, .5), "Grey", "SmoothPlastic", 0, false, false, "WedgePart") | |
727 | Weld(Ear1, Ear3, CN(0, 0, .5) * CA(0, Pi, 0)) | |
728 | local Ear3 = Part(Model2, CF, V3(.75, 1.5, .5), "Grey", "SmoothPlastic", 0, false, false, "WedgePart") | |
729 | Weld(Ear2, Ear3, CN(0, 0, .5) * CA(0, Pi, 0)) | |
730 | local Tail = Part(Model2, CF, V3(5, 2, 2), "Grey", "SmoothPlastic", 0, false, false) | |
731 | local TailW = Weld(Body, Tail, CA(0, 0, Pi/8) * CN(-2.5, .5, 0), CN(2.5, -.5, 0)) | |
732 | HandleW.Part0 = Snout | |
733 | HandleW.C0 = CA(Pi/2, 0, 0) | |
734 | ||
735 | -- > Left Leg | |
736 | local B1LegP1 = Part(Model2, CF, V3(2, 2.5, 1), "Grey", "SmoothPlastic", 0, false, false) | |
737 | local B1LegP1W = Weld(Body, B1LegP1, CN(-1, -.25, -1), CN(1, .25, 1)) | |
738 | local B1LegP2 = Part(Model2, CF, V3(1.5, 2, 1), "Grey", "SmoothPlastic", 0, false, false) | |
739 | local B1LegP2W = Weld(B1LegP1, B1LegP2, CA(0, 0, -Pi/6) * CN(0, -.75, 0), CN(0, .75, 0)) | |
740 | local B1LegP3 = Part(Model2, CF, V3(1, 2.5, 1), "Grey", "SmoothPlastic", 0, false, false) | |
741 | local B1LegP3W = Weld(B1LegP2, B1LegP3, CA(0, 0, Pi/7) * CN(0, -1, 0), CN(0, 1, 0)) | |
742 | local B1Paw = Part(Model2, CF, V3(1.5, .75, 1), "Grey", "SmoothPlastic", 0, false, false) | |
743 | local B1PawW = Weld(B1LegP3, B1Paw, CA(0, 0, Pi/18) * CN(0, -.75, 0), CN(0, .75, 0)) | |
744 | LeftBLeg = { | |
745 | Paw = B1PawW, | |
746 | P1 = B1LegP1W, | |
747 | P2 = B1LegP2W, | |
748 | P3 = B1LegP3W | |
749 | } | |
750 | ||
751 | -- > Right Leg | |
752 | local B1LegP1 = Part(Model2, CF, V3(2, 2.5, 1), "Grey", "SmoothPlastic", 0, false, false) | |
753 | local B1LegP1W = Weld(Body, B1LegP1, CN(-1, -.25, 1), CN(1, .25, -1)) | |
754 | local B1LegP2 = Part(Model2, CF, V3(1.5, 2, 1), "Grey", "SmoothPlastic", 0, false, false) | |
755 | local B1LegP2W = Weld(B1LegP1, B1LegP2, CA(0, 0, -Pi/6) * CN(0, -.75, 0), CN(0, .75, 0)) | |
756 | local B1LegP3 = Part(Model2, CF, V3(1, 2.5, 1), "Grey", "SmoothPlastic", 0, false, false) | |
757 | local B1LegP3W = Weld(B1LegP2, B1LegP3, CA(0, 0, Pi/7) * CN(0, -1, 0), CN(0, 1, 0)) | |
758 | local B1Paw = Part(Model2, CF, V3(1.5, .75, 1), "Grey", "SmoothPlastic", 0, false, false) | |
759 | local B1PawW = Weld(B1LegP3, B1Paw, CA(0, 0, Pi/18) * CN(0, -.75, 0), CN(0, .75, 0)) | |
760 | RightBLeg = { | |
761 | Paw = B1PawW, | |
762 | P1 = B1LegP1W, | |
763 | P2 = B1LegP2W, | |
764 | P3 = B1LegP3W | |
765 | } | |
766 | ||
767 | -- > Left Leg Front | |
768 | local B1LegP1 = Part(Model2, CF, V3(1.5, 3, 1), "Grey", "SmoothPlastic", 0, false, false) | |
769 | local B1LegP1W = Weld(Body, B1LegP1, CN(1, -.5, -1), CN(-1, .5, 1)) | |
770 | local B1LegP2 = Part(Model2, CF, V3(1.25, 3, 1), "Grey", "SmoothPlastic", 0, false, false) | |
771 | local B1LegP2W = Weld(B1LegP1, B1LegP2, CN(0, -1.25, 0), CN(0, 1.25, 0)) | |
772 | local B1Paw = Part(Model2, CF, V3(1.5, .75, 1), "Grey", "SmoothPlastic", 0, false, false) | |
773 | local B1PawW = Weld(B1LegP2, B1Paw, CN(.25, -.75, 0), CN(-.25, .75, 0)) | |
774 | LeftFLeg = { | |
775 | Paw = B1PawW, | |
776 | P1 = B1LegP1W, | |
777 | P2 = B1LegP2W, | |
778 | } | |
779 | ||
780 | -- > Right Leg Front | |
781 | local B1LegP1 = Part(Model2, CF, V3(1.5, 3, 1), "Grey", "SmoothPlastic", 0, false, false) | |
782 | local B1LegP1W = Weld(Body, B1LegP1, CN(1, -.5, 1), CN(-1, .5, -1)) | |
783 | local B1LegP2 = Part(Model2, CF, V3(1.25, 3, 1), "Grey", "SmoothPlastic", 0, false, false) | |
784 | local B1LegP2W = Weld(B1LegP1, B1LegP2, CN(0, -1.25, 0), CN(0, 1.25, 0)) | |
785 | local B1Paw = Part(Model2, CF, V3(1.5, .75, 1), "Grey", "SmoothPlastic", 0, false, false) | |
786 | local B1PawW = Weld(B1LegP2, B1Paw, CN(.25, -.75, 0), CN(-.25, .75, 0)) | |
787 | RightFLeg = { | |
788 | Paw = B1PawW, | |
789 | P1 = B1LegP1W, | |
790 | P2 = B1LegP2W, | |
791 | } | |
792 | ||
793 | -- > Humanoid | |
794 | local Lupin = New("Humanoid", Model2, { Name = "Lupin", MaxHealth = 1/0 }) | |
795 | ||
796 | -- > Effects | |
797 | Spawn(function() | |
798 | for i = 1, 5 do | |
799 | wait() | |
800 | SphereExplode(Body.CFrame * CN(0, -3, 0), math.random(2, 6), "White") | |
801 | CrownSpin(Body.CFrame * CN(0, -3, 0), math.random(5, 15), "White") | |
802 | for _ = 1, 2 do | |
803 | BrickTo(Body.CFrame * CA(Random(1), Random(1), Random(1)), Body.CFrame * CN(Random(5), Random(5), Random(5)), math.random(2, 7), "White") | |
804 | end | |
805 | end | |
806 | end) | |
807 | ||
808 | -- > Animations < -- | |
809 | local Loop | |
810 | local Count = 0 | |
811 | local CountTime = 50 | |
812 | local Speed = .175 | |
813 | local LookAround = tick() | |
814 | local Looks = 0 | |
815 | local IsLooking = false | |
816 | local Slash1 = false | |
817 | local Follow = true | |
818 | local Target = nil | |
819 | local Human = nil | |
820 | local LastSlash = tick() | |
821 | ||
822 | SlashOne = function() | |
823 | Slash1 = true | |
824 | Attacking = true | |
825 | ||
826 | TweenWeld(BWeld, 0, BWeld.C0, CN(0, 2.5, 0) * CA(0, Pi/2, 0) * CN(0, 7.5, 0), 4, true) | |
827 | TweenWeld(NeckW, 0, NeckW.C0, CA(0, 0, Pi/8) * CN(.75, 0, 0) * CA(0, -Pi/4, Pi/24), 4, true) | |
828 | TweenWeld(HandleW, 0, HandleW.C0, CA(Pi/4, 0, 0), 5, false) | |
829 | ||
830 | StartTrail(Blade, "Light red") | |
831 | Slash1 = false | |
832 | TweenWeld(BWeld, 0, BWeld.C0, CN(0, 2.5, 0) * CA(0, Pi/2, 0), 4, true) | |
833 | TweenWeld(NeckW, 0, NeckW.C0, CA(0, 0, Pi/8) * CN(.75, 0, 0) * CA(0, Pi/4, -Pi/24), 4, true) | |
834 | TweenWeld(HandleW, 0, HandleW.C0, CA(Pi/1.25, 0, -Pi/3), 5, false) | |
835 | DamageNearby(Handle.CFrame, 25, 10) | |
836 | StopTrail() | |
837 | ||
838 | TweenWeld(NeckW, 0, NeckW.C0, CA(0, 0, Pi/8) * CN(.75, 0, 0), 4, true) | |
839 | TweenWeld(HandleW, 0, HandleW.C0, CA(Pi/2, 0, 0), 5, false) | |
840 | ||
841 | Attacking = false | |
842 | end | |
843 | ChangeFollow = function(TargetRequest, HumanRequest) | |
844 | if not TargetRequest then | |
845 | Follow = true | |
846 | Target = nil | |
847 | HumanRequest = nil | |
848 | elseif TargetRequest and TargetRequest:IsA("Model") then | |
849 | Target = TargetRequest | |
850 | Human = HumanRequest | |
851 | Follow = false | |
852 | end | |
853 | end | |
854 | IsFollowing = function() | |
855 | return Follow | |
856 | end | |
857 | Loop = game:service("RunService").Stepped:connect(function() | |
858 | local RootMag = V3(FakeHRP.Velocity.X, 0, FakeHRP.Velocity.Z).magnitude | |
859 | if RootMag > 2 then | |
860 | if Follow then | |
861 | Mode = "Walking" | |
862 | Lupin.WalkSpeed = Humanoid.WalkSpeed | |
863 | else | |
864 | Mode = "Running" | |
865 | Lupin.WalkSpeed = 75 | |
866 | end | |
867 | elseif RootMag < 2 then | |
868 | Mode = "Idle" | |
869 | end | |
870 | if Slash1 then Mode = "Jump" end | |
871 | local CF = Torso.CFrame * CN(0, 0, 10) | |
872 | if Follow then | |
873 | Lupin:MoveTo(CF.p, workspace.Terrain) | |
874 | else | |
875 | if not Target or Human.Health == 0 then | |
876 | Follow = true | |
877 | Target = nil | |
878 | Human = nil | |
879 | else | |
880 | local TargCF = Target:GetModelCFrame() | |
881 | local CF = CFrame.new(TargCF * CN(0, 0, 10).p, TargCF.p) | |
882 | Lupin:MoveTo(CF.p, workspace.Terrain) | |
883 | local Mag = (CF.p - Vector3.new(Stand.CFrame.X, CF.Y, Stand.CFrame.Z)).magnitude | |
884 | if Mag < 7.5 and not Attacking and (tick()-LastSlash) > 3 then | |
885 | game:service("Debris"):AddItem(New("BodyGyro", Stand, { maxTorque = V3(1, 1, 1) * 10^6, P = 10^4, cframe = CF }), 1) | |
886 | LastSlash = tick() | |
887 | Spawn(function() SlashOne() end) | |
888 | end | |
889 | end | |
890 | end | |
891 | Count = (Count%CountTime)+Speed | |
892 | local Sine = math.sin(Count) | |
893 | if Mode == "Walking" then | |
894 | CountTime = 50 | |
895 | Speed = .175 | |
896 | ||
897 | RightFLeg.P1.C0 = cslerp(RightFLeg.P1.C0, CN(1, -.5, 1) * CA(0, 0, -Sine*.35), Speed) | |
898 | RightFLeg.P2.C0 = cslerp(RightFLeg.P2.C0, CN(0, -1.25, 0) * CA(0, 0, -Sine*.25), Speed) | |
899 | RightFLeg.Paw.C0 = cslerp(RightFLeg.Paw.C0, CN(.25, -.75, 0) * CA(0, 0, Sine*.5), Speed) | |
900 | ||
901 | LeftFLeg.P1.C0 = cslerp(LeftFLeg.P1.C0, CN(1, -.5, -1) * CA(0, 0, Sine*.35), Speed) | |
902 | LeftFLeg.P2.C0 = cslerp(LeftFLeg.P2.C0, CN(0, -1.25, 0) * CA(0, 0, Sine*.25), Speed) | |
903 | LeftFLeg.Paw.C0 = cslerp(LeftFLeg.Paw.C0, CN(.25, -.75, 0) * CA(0, 0, -Sine*.5), Speed) | |
904 | ||
905 | RightBLeg.P1.C0 = cslerp(RightBLeg.P1.C0, CN(-1, -.25, 1) * CA(0, 0, Sine*.15), Speed) | |
906 | RightBLeg.P2.C0 = cslerp(RightBLeg.P2.C0, CA(0, 0, -Pi/6) * CN(0, -.75, 0) * CA(0, 0, Sine*.15), Speed) | |
907 | RightBLeg.P3.C0 = cslerp(RightBLeg.P3.C0, CA(0, 0, Pi/7) * CN(0, -1, 0) * CA(0, 0, Sine*.15), Speed) | |
908 | RightBLeg.Paw.C0 = cslerp(RightBLeg.Paw.C0, CA(0, 0, Pi/18) * CN(0, -.75, 0) * CA(0, 0, -Sine*.15), Speed) | |
909 | ||
910 | LeftBLeg.P1.C0 = cslerp(LeftBLeg.P1.C0, CN(-1, -.25, -1) * CA(0, 0, -Sine*.15), Speed) | |
911 | LeftBLeg.P2.C0 = cslerp(LeftBLeg.P2.C0, CA(0, 0, -Pi/6) * CN(0, -.75, 0) * CA(0, 0, -Sine*.15), Speed) | |
912 | LeftBLeg.P3.C0 = cslerp(LeftBLeg.P3.C0, CA(0, 0, Pi/7) * CN(0, -1, 0) * CA(0, 0, -Sine*.15), Speed) | |
913 | LeftBLeg.Paw.C0 = cslerp(LeftBLeg.Paw.C0, CA(0, 0, Pi/18) * CN(0, -.75, 0) * CA(0, 0, Sine*.15), Speed) | |
914 | ||
915 | TailW.C0 = cslerp(TailW.C0, CA(0, 0, Pi/8) * CN(-2.5, .5, 0) * CA(0, Sine*.25, 0), Speed) | |
916 | BTWeld.C0 = cslerp(BTWeld.C0, CN(1, 0, 0) * CA(0, Sine*.125, 0), Speed) | |
917 | ||
918 | if not Slash1 then NeckW.C0 = cslerp(NeckW.C0, CA(0, 0, Pi/8) * CN(.75, 0, 0), Speed) end | |
919 | elseif Mode == "Running" then | |
920 | CountTime = 50 | |
921 | Speed = .4 | |
922 | ||
923 | RightFLeg.P1.C0 = cslerp(RightFLeg.P1.C0, CN(1, -.5, 1) * CA(0, 0, -Sine*.35), Speed) | |
924 | RightFLeg.P2.C0 = cslerp(RightFLeg.P2.C0, CN(0, -1.25, 0) * CA(0, 0, -Sine*.25), Speed) | |
925 | RightFLeg.Paw.C0 = cslerp(RightFLeg.Paw.C0, CN(.25, -.75, 0) * CA(0, 0, -Sine*.5), Speed) | |
926 | ||
927 | LeftFLeg.P1.C0 = cslerp(LeftFLeg.P1.C0, CN(1, -.5, -1) * CA(0, 0, -Sine*.35), Speed) | |
928 | LeftFLeg.P2.C0 = cslerp(LeftFLeg.P2.C0, CN(0, -1.25, 0) * CA(0, 0, -Sine*.25), Speed) | |
929 | LeftFLeg.Paw.C0 = cslerp(LeftFLeg.Paw.C0, CN(.25, -.75, 0) * CA(0, 0, -Sine*.5), Speed) | |
930 | ||
931 | RightBLeg.P1.C0 = cslerp(RightBLeg.P1.C0, CN(-1, -.25, 1) * CA(0, 0, Sine*.25), Speed) | |
932 | RightBLeg.P2.C0 = cslerp(RightBLeg.P2.C0, CA(0, 0, -Pi/6) * CN(0, -.75, 0) * CA(0, 0, Sine*.25), Speed) | |
933 | RightBLeg.P3.C0 = cslerp(RightBLeg.P3.C0, CA(0, 0, Pi/7) * CN(0, -1, 0) * CA(0, 0, Sine*.25), Speed) | |
934 | RightBLeg.Paw.C0 = cslerp(RightBLeg.Paw.C0, CA(0, 0, Pi/18) * CN(0, -.75, 0) * CA(0, 0, Sine*.25), Speed) | |
935 | ||
936 | LeftBLeg.P1.C0 = cslerp(LeftBLeg.P1.C0, CN(-1, -.25, -1) * CA(0, 0, Sine*.25), Speed) | |
937 | LeftBLeg.P2.C0 = cslerp(LeftBLeg.P2.C0, CA(0, 0, -Pi/6) * CN(0, -.75, 0) * CA(0, 0, Sine*.25), Speed) | |
938 | LeftBLeg.P3.C0 = cslerp(LeftBLeg.P3.C0, CA(0, 0, Pi/7) * CN(0, -1, 0) * CA(0, 0, Sine*.25), Speed) | |
939 | LeftBLeg.Paw.C0 = cslerp(LeftBLeg.Paw.C0, CA(0, 0, Pi/18) * CN(0, -.75, 0) * CA(0, 0, Sine*.25), Speed) | |
940 | ||
941 | TailW.C0 = cslerp(TailW.C0, CA(0, 0, Pi/8) * CN(-2.5, .5, 0) * CA(0, Sine*.125, 0), Speed) | |
942 | BTWeld.C0 = cslerp(BTWeld.C0, CN(1, 0, 0) * CA(0, Sine*.075, 0), Speed) | |
943 | ||
944 | if not Slash1 then NeckW.C0 = cslerp(NeckW.C0, CA(0, 0, Pi/8) * CN(.75, 0, 0), Speed) end | |
945 | elseif Mode == "Idle" then | |
946 | CountTime = 75 | |
947 | Speed = .175 | |
948 | ||
949 | RightFLeg.P1.C0 = cslerp(RightFLeg.P1.C0, CN(1, -.5, 1), Speed) | |
950 | RightFLeg.P2.C0 = cslerp(RightFLeg.P2.C0, CN(0, -1.25, 0), Speed) | |
951 | RightFLeg.Paw.C0 = cslerp(RightFLeg.Paw.C0, CN(.25, -.75, 0), Speed) | |
952 | ||
953 | LeftFLeg.P1.C0 = cslerp(LeftFLeg.P1.C0, CN(1, -.5, -1), Speed) | |
954 | LeftFLeg.P2.C0 = cslerp(LeftFLeg.P2.C0, CN(0, -1.25, 0), Speed) | |
955 | LeftFLeg.Paw.C0 = cslerp(LeftFLeg.Paw.C0, CN(.25, -.75, 0), Speed) | |
956 | ||
957 | RightBLeg.P1.C0 = cslerp(RightBLeg.P1.C0, CN(-1, -.25, 1), Speed) | |
958 | RightBLeg.P2.C0 = cslerp(RightBLeg.P2.C0, CA(0, 0, -Pi/6) * CN(0, -.75, 0), Speed) | |
959 | RightBLeg.P3.C0 = cslerp(RightBLeg.P3.C0, CA(0, 0, Pi/7) * CN(0, -1, 0), Speed) | |
960 | RightBLeg.Paw.C0 = cslerp(RightBLeg.Paw.C0, CA(0, 0, Pi/18) * CN(0, -.75, 0), Speed) | |
961 | ||
962 | LeftBLeg.P1.C0 = cslerp(LeftBLeg.P1.C0, CN(-1, -.25, -1), Speed) | |
963 | LeftBLeg.P2.C0 = cslerp(LeftBLeg.P2.C0, CA(0, 0, -Pi/6) * CN(0, -.75, 0), Speed) | |
964 | LeftBLeg.P3.C0 = cslerp(LeftBLeg.P3.C0, CA(0, 0, Pi/7) * CN(0, -1, 0), Speed) | |
965 | LeftBLeg.Paw.C0 = cslerp(LeftBLeg.Paw.C0, CA(0, 0, Pi/18) * CN(0, -.75, 0), Speed) | |
966 | ||
967 | TailW.C0 = cslerp(TailW.C0, CA(0, 0, Pi/8) * CN(-2.5, .5, 0), Speed) | |
968 | BTWeld.C0 = cslerp(BTWeld.C0, CN(1, 0, 0), Speed) | |
969 | ||
970 | if (tick()-LookAround) > 7.5 and not IsLooking then | |
971 | IsLooking = true | |
972 | Looks = Looks + 1 | |
973 | elseif (tick()-LookAround) > 10 then | |
974 | IsLooking = false | |
975 | LookAround = tick() | |
976 | end | |
977 | if not Slash1 then NeckW.C0 = cslerp(NeckW.C0, CA(0, 0, Pi/8) * CN(.75, 0, 0) * CA(0, IsLooking and (Looks % 2 == 0 and -.375 or .375) or 0, 0), Speed) end | |
978 | elseif Mode == "Jump" then | |
979 | CountTime = 50 | |
980 | Speed = .75 | |
981 | ||
982 | RightFLeg.P1.C0 = cslerp(RightFLeg.P1.C0, CN(1, -.5, 1) * CA(0, 0, Pi/5), Speed) | |
983 | RightFLeg.P2.C0 = cslerp(RightFLeg.P2.C0, CN(0, -1.25, 0), Speed) | |
984 | RightFLeg.Paw.C0 = cslerp(RightFLeg.Paw.C0, CN(.25, -.75, 0), Speed) | |
985 | ||
986 | LeftFLeg.P1.C0 = cslerp(LeftFLeg.P1.C0, CN(1, -.5, -1) * CA(0, 0, Pi/5), Speed) | |
987 | LeftFLeg.P2.C0 = cslerp(LeftFLeg.P2.C0, CN(0, -1.25, 0), Speed) | |
988 | LeftFLeg.Paw.C0 = cslerp(LeftFLeg.Paw.C0, CN(.25, -.75, 0), Speed) | |
989 | ||
990 | RightBLeg.P1.C0 = cslerp(RightBLeg.P1.C0, CN(-1, -.25, 1) * CA(0, 0, -Pi/5), Speed) | |
991 | RightBLeg.P2.C0 = cslerp(RightBLeg.P2.C0, CA(0, 0, -Pi/6) * CN(0, -.75, 0), Speed) | |
992 | RightBLeg.P3.C0 = cslerp(RightBLeg.P3.C0, CA(0, 0, Pi/7) * CN(0, -1, 0), Speed) | |
993 | RightBLeg.Paw.C0 = cslerp(RightBLeg.Paw.C0, CA(0, 0, Pi/18) * CN(0, -.75, 0), Speed) | |
994 | ||
995 | LeftBLeg.P1.C0 = cslerp(LeftBLeg.P1.C0, CN(-1, -.25, -1) * CA(0, 0, -Pi/5), Speed) | |
996 | LeftBLeg.P2.C0 = cslerp(LeftBLeg.P2.C0, CA(0, 0, -Pi/6) * CN(0, -.75, 0), Speed) | |
997 | LeftBLeg.P3.C0 = cslerp(LeftBLeg.P3.C0, CA(0, 0, Pi/7) * CN(0, -1, 0), Speed) | |
998 | LeftBLeg.Paw.C0 = cslerp(LeftBLeg.Paw.C0, CA(0, 0, Pi/18) * CN(0, -.75, 0), Speed) | |
999 | ||
1000 | TailW.C0 = cslerp(TailW.C0, CA(0, 0, Pi/8) * CN(-2.5, .5, 0), Speed) | |
1001 | BTWeld.C0 = cslerp(BTWeld.C0, CN(1, 0, 0), Speed) | |
1002 | end | |
1003 | end) | |
1004 | ||
1005 | Spawn(function() | |
1006 | repeat wait() until not WolfOn | |
1007 | DiamondExplode(Body.CFrame * CA(Random(1), Random(1), Random(1)), 5, "White") | |
1008 | end) | |
1009 | ||
1010 | TweenWeld(RS, 0, RS.C0, C0.RS * CN(-.125, 0 , 0) * CA(0, 0, Pi/16), 5, true) | |
1011 | TweenWeld(LS, 0, LS.C0, C0.LS * CN(.125, 0 , 0) * CA(0, 0, -Pi/16), 5, false) | |
1012 | wait() | |
1013 | Attacking = false | |
1014 | end | |
1015 | function Unwolf() | |
1016 | Attacking = true | |
1017 | HandleW.Part0 = RA | |
1018 | HandleW.C0 = CN(0, 0, -.5) | |
1019 | TweenWeld(RS, 0, RS.C0, C0.RS * CN(-.125, 0 , 0) * CA(Pi/1.625, 0, Pi/8), 5, true) | |
1020 | TweenWeld(LS, 0, LS.C0, C0.LS * CN(.125, 0 , 0) * CA(0, 0, -Pi/16), 5, false) | |
1021 | Model2:FindFirstChild("Stand"):Destroy() | |
1022 | WolfOn = false | |
1023 | Attacking = false | |
1024 | end | |
1025 | function Slash1() | |
1026 | Attacking = true | |
1027 | TweenWeld(TW, 0, TW.C0, C0.TW * CA(0, -Pi/5, 0), 7, true) | |
1028 | TweenWeld(NK, 0, NK.C0, C0.NK * CA(0, Pi/5, 0), 7, true) | |
1029 | TweenWeld(RS, 0, RS.C0, C0.RS * CA(Pi/1.75, 0, Pi/10), 7, true) | |
1030 | TweenWeld(LS, 0, LS.C0, C0.LS * CN(.75, 0, 0) * CA(Pi/2, 0, Pi/3), 7, false) | |
1031 | StartTrail(Blade, "Light red") | |
1032 | wait() | |
1033 | TweenWeld(HandleW, 0, HandleW.C0, C0.HW * CN(0, -.75, 0) * CA(0, 0, -Pi), 4, true) | |
1034 | TweenWeld(TW, 0, TW.C0, C0.TW * CA(0, Pi/3, 0), 4, true) | |
1035 | TweenWeld(NK, 0, NK.C0, C0.NK * CA(0, -Pi/3, 0), 4, true) | |
1036 | TweenWeld(RS, 0, RS.C0, C0.RS * CA(Pi/2.25, 0, 0), 4, true) | |
1037 | TweenWeld(LS, 0, LS.C0, C0.LS * CA(Pi/2.75, 0, Pi/4), 4, false) | |
1038 | DamageNearby(Handle.CFrame, 10, 10) | |
1039 | StopTrail() | |
1040 | wait() | |
1041 | ReturnToDefault(7) | |
1042 | wait() | |
1043 | Attacking = false | |
1044 | end | |
1045 | function DRAGAWN() | |
1046 | Attacking = true | |
1047 | HandleW.Parent = nil | |
1048 | local DragonMesh = Asset .. "58430372" | |
1049 | local CF0 = CN(Torso.CFrame.X, Torso.CFrame.Y, Torso.CFrame.Z) | |
1050 | local HBP = New("BodyPosition", Handle, { maxForce = V3(math.huge, math.huge, math.huge), position = (CF0 * CN(0, 10, 0)).p }) | |
1051 | local HBG = New("BodyGyro", Handle, { P = 10^4, maxTorque = V3(1, 1, 1) * 10 ^ 6, cframe = CF0 }) | |
1052 | local HRPBG = New("BodyGyro", HRP, { P = 10^4, maxTorque = V3(1, 1, 1) * 10 ^ 6, cframe = HRP.CFrame }) | |
1053 | TweenWeld(RS, 0, RS.C0, C0.RS * CN(.375, 0, -.5) * CA(Pi/2, 0, Pi/2), 5, true) | |
1054 | TweenWeld(NK, 0, NK.C0, C0.NK * CA(0, -Pi/2, 0), 5, true) | |
1055 | TweenWeld(LS, 0, LS.C0, C0.LS * CN(0, 0, 0) * CA(0, 0, -Pi/16), 5, false) | |
1056 | local Going = true | |
1057 | local Hit = nil | |
1058 | Spawn(function() | |
1059 | while wait() and Going do | |
1060 | Hit = Mouse.Hit | |
1061 | local CF0 = CN(Torso.CFrame.X, Torso.CFrame.Y, Torso.CFrame.Z) | |
1062 | local POS = (CF0 * CN(0, 10, 0)).p | |
1063 | HBG.cframe = CN(Handle.CFrame.p, Hit.p) * CA(-Pi/2, 0, 0) | |
1064 | HBP.position = POS | |
1065 | HRPBG.cframe = CN(HRP.CFrame.p, V3(Hit.X, HRP.CFrame.Y, Hit.Z)) * CA(0, Pi/2, 0) | |
1066 | Glitter(Blade.CFrame * CN(Random(10), Random(10), Random(10)), "Phosph. White", .25) | |
1067 | end | |
1068 | end) | |
1069 | Mouse.Button1Down:wait() | |
1070 | Going = false | |
1071 | HRPBG.cframe = CN(HRP.CFrame.p, V3(Hit.X, HRP.CFrame.Y, Hit.Z)) | |
1072 | TweenWeld(RS, 0, RS.C0, C0.RS * CN(0, .5, 0) * CA(Pi/1.25, 0, Pi/8), 5, true) | |
1073 | TweenWeld(NK, 0, NK.C0, C0.NK, 5, true) | |
1074 | TweenWeld(LS, 0, LS.C0, C0.LS * CN(0, .5, 0) * CA(Pi/1.25, 0, -Pi/8), 5, false) | |
1075 | local DragonHead = Part(workspace, Blade.CFrame * CA(Pi/2, 0, 0), V3(5, 20, 10), "Bright violet", "SmoothPlastic", 1, true, false) | |
1076 | local DHCF = DragonHead.CFrame * CN(0, 0, -10) * CA(-Pi/2, 0, 0) | |
1077 | DragonHead.CFrame = DragonHead.CFrame * CN(0, 2.5, 0) | |
1078 | local Mag = (Hit.p - DHCF * CN(0, 5, 0).p).magnitude | |
1079 | local BP1 = Part(workspace, CN(DHCF.p, Hit.p) * CN(0, 0, -Mag/2) * CA(0, Pi/2, 0), V3(Mag, 7.5, 7.5), "Bright violet", "SmoothPlastic", 1, true, false) | |
1080 | local BP2 = Part(workspace, CN(DHCF.p, Hit.p) * CN(0, 0, -Mag/2) * CA(0, Pi/2, 0), V3(Mag, 5, 5), "Phosph. White", "SmoothPlastic", 1, true, false) | |
1081 | New("SpecialMesh", BP1, { MeshType = "Cylinder" }) | |
1082 | New("SpecialMesh", BP2, { MeshType = "Cylinder" }) | |
1083 | New("FileMesh", DragonHead, { Scale = V3(7.5, 7.5, 7.5), MeshId = DragonMesh }) | |
1084 | local Amount = math.random(10, 20) | |
1085 | Spawn(function() | |
1086 | for i = 1, .3, -.15 do | |
1087 | wait() | |
1088 | BP1.Transparency = i | |
1089 | BP2.Transparency = i | |
1090 | DragonHead.Transparency = i | |
1091 | end | |
1092 | BP1.Transparency = .3 | |
1093 | BP2.Transparency = .3 | |
1094 | DragonHead.Transparency = .3 | |
1095 | end) | |
1096 | Delay(Amount*wait(.1), function() | |
1097 | for i = 0.3, 1.05, .05 do | |
1098 | DragonHead.Transparency = i | |
1099 | BP1.Transparency = i | |
1100 | BP2.Transparency = i | |
1101 | wait() | |
1102 | end | |
1103 | DragonHead:Destroy() | |
1104 | BP1:Destroy() | |
1105 | BP2:Destroy() | |
1106 | end) | |
1107 | for i = 1, Amount do | |
1108 | local Size = math.random(10, 20) | |
1109 | DiamondExplode(Torso.CFrame * CN(Random(10), -Size, Random(10)), Size, "Bright violet") | |
1110 | SpikeUp(Torso.CFrame * CA(Random(Pi/8), 0, Random(Pi/8)) * CN(Random(20), -Size, Random(20)), Size, "Bright violet") | |
1111 | SphereExplode(Hit, 5, "Bright violet") | |
1112 | DiamondExplode(Hit, 1, "Phosph. White") | |
1113 | Delay(Random(.1), function() CrownSpin(DHCF, 10, "Bright violet") end) | |
1114 | DamageNearby(Hit, 7.5, 7.5) | |
1115 | wait(.1) | |
1116 | end | |
1117 | Shooting = false | |
1118 | wait() | |
1119 | HBG:Destroy() | |
1120 | HBP:Destroy() | |
1121 | HRPBG:Destroy() | |
1122 | HandleW.Parent = Model | |
1123 | HandleW.Part0 = RA | |
1124 | HandleW.C0 = CN(0, 0, -.5) | |
1125 | ReturnToDefault(10) | |
1126 | wait() | |
1127 | Attacking = false | |
1128 | end | |
1129 | ||
1130 | ----------------------------------------------------------------------------------------------------- | |
1131 | ||
1132 | TW = HRP:WaitForChild("RootJoint") | |
1133 | NK = Weld(Torso, Head, C0.NK, C1.NK) | |
1134 | Equip = function(Mouse) | |
1135 | if not SpiritOn and not WolfOn and not Attacking and not SwordInactive then | |
1136 | HandleW.Part0 = RA | |
1137 | HandleW.C0 = CN(0, 0, -.5) | |
1138 | OLS.Parent = nil | |
1139 | ORS.Parent = nil | |
1140 | TW.C0 = CN() | |
1141 | TW.C1 = CN() | |
1142 | RS = Weld(Torso, RA, C0.RS * CN(-.125, 0 , 0) * CA(Pi/1.625, 0, Pi/8), C1.RS) | |
1143 | LS = Weld(Torso, LA, C0.LS * CN(.125, 0 , 0) * CA(0, 0, -Pi/16), C1.LS) | |
1144 | end | |
1145 | Mouse.Button1Down:connect(function() | |
1146 | if Attacking then return end | |
1147 | if not SpiritOn and not WolfOn then Slash1() end | |
1148 | if WolfOn and IsFollowing() then | |
1149 | pcall(SlashOne) | |
1150 | end | |
1151 | end) | |
1152 | Mouse.KeyDown:connect(function(Key) | |
1153 | Key:lower() | |
1154 | if Attacking then return end | |
1155 | if not SwordInactive then | |
1156 | if Key == "f" and not SpiritOn and not WolfOn then | |
1157 | Spirit() | |
1158 | elseif Key == "f" and SpiritOn and not WolfOn then | |
1159 | Unspirit() | |
1160 | elseif Key == "q" and SpiritOn and not WolfOn then | |
1161 | _SpiritEvent:fire("Slam") | |
1162 | elseif Key == "e" and SpiritOn and not WolfOn then | |
1163 | _SpiritEvent:fire("Throw") | |
1164 | elseif Key == "q" and not SpiritOn and not WolfOn then | |
1165 | DRAGAWN() | |
1166 | elseif Key == "e" and not SpiritOn and not WolfOn then | |
1167 | Wolf() | |
1168 | elseif Key == "e" and not SpiritOn and WolfOn then | |
1169 | Unwolf() | |
1170 | elseif Key == "r" and not SpiritOn and WolfOn then | |
1171 | local Target = Mouse.Target | |
1172 | if Target.Parent:FindFirstChild("Torso") then | |
1173 | local Hum | |
1174 | for i, v in pairs(Target.Parent:children()) do | |
1175 | if v:IsA("Humanoid") then | |
1176 | Hum = v | |
1177 | break | |
1178 | end | |
1179 | end | |
1180 | if Hum then | |
1181 | ChangeFollow(Target.Parent, Hum) | |
1182 | end | |
1183 | else | |
1184 | ChangeFollow() | |
1185 | end | |
1186 | end | |
1187 | else | |
1188 | ||
1189 | end | |
1190 | end) | |
1191 | end | |
1192 | Unequip = function() | |
1193 | if SpiritOn or WolfOn or SwordInactive then return end | |
1194 | if Attacking then | |
1195 | repeat wait() until not Attacking | |
1196 | end | |
1197 | RS:Destroy() | |
1198 | LS:Destroy() | |
1199 | OLS.Parent = Torso | |
1200 | OLS.Part0, OLS.Part1 = Torso, LA | |
1201 | ORS.Parent = Torso | |
1202 | ORS.Part0, ORS.Part1 = Torso, RA | |
1203 | TW.C0 = C0.TW | |
1204 | NK.C0 = C0.NK | |
1205 | HandleW.Part0 = Torso | |
1206 | HandleW.C0 = CN(1, -1, .5) * CA(0, 0, Pi/4) | |
1207 | end | |
1208 | pcall(game.Destroy, Backpack:FindFirstChild("Sword")) | |
1209 | Tool = New("HopperBin", Backpack, { Name = "Sword" }) | |
1210 | Tool.Selected:connect(Equip) | |
1211 | Tool.Deselected:connect(Unequip) |