View difference between Paste ID: wxMGxnxN and 39eM4iLK
SHOW: | | - or go back to the newest paste.
1
--https://github.com/Mokiros/roblox-FE-compatibility
2-
by ages_dreamcast around 2017-ish
2+
if game:GetService("RunService"):IsClient() then error("Script must be server-side in order to work; use h/ and not hl/") end
3-
put in startergui as a localscript
3+
local Player,Mouse,mouse,UserInputService,ContextActionService = owner
4-
press Q to fire
4+
local RealPlayer = Player
5-
]]--
5+
do print("FE Compatibility code by Mokiros")local a=RealPlayer;script.Parent=a.Character;local b=Instance.new("RemoteEvent")b.Name="UserInput_Event"local function c()local d={_fakeEvent=true,Functions={},Connect=function(self,e)table.insert(self.Functions,e)end}d.connect=d.Connect;return d end;local f={Target=nil,Hit=CFrame.new(),KeyUp=c(),KeyDown=c(),Button1Up=c(),Button1Down=c(),Button2Up=c(),Button2Down=c()}local g={InputBegan=c(),InputEnded=c()}local CAS={Actions={},BindAction=function(self,h,i,j,...)CAS.Actions[h]=i and{Name=h,Function=i,Keys={...}}or nil end}CAS.UnbindAction=CAS.BindAction;local function k(self,l,...)local d=f[l]if d and d._fakeEvent then for m,e in pairs(d.Functions)do e(...)end end end;f.TrigEvent=k;g.TrigEvent=k;b.OnServerEvent:Connect(function(n,o)if n~=a then return end;f.Target=o.Target;f.Hit=o.Hit;if not o.isMouse then local p=o.UserInputState==Enum.UserInputState.Begin;if o.UserInputType==Enum.UserInputType.MouseButton1 then return f:TrigEvent(p and"Button1Down"or"Button1Up")end;if o.UserInputType==Enum.UserInputType.MouseButton2 then return f:TrigEvent(p and"Button2Down"or"Button2Up")end;for m,d in pairs(CAS.Actions)do for m,q in pairs(d.Keys)do if q==o.KeyCode then d.Function(d.Name,o.UserInputState,o)end end end;f:TrigEvent(p and"KeyDown"or"KeyUp",o.KeyCode.Name:lower())g:TrigEvent(p and"InputBegan"or"InputEnded",o,false)end end)b.Parent=NLS([==[local a=game:GetService("Players").LocalPlayer;local b=script:WaitForChild("UserInput_Event")local c=a:GetMouse()local d=game:GetService("UserInputService")local e=function(f,g)if g then return end;b:FireServer({KeyCode=f.KeyCode,UserInputType=f.UserInputType,UserInputState=f.UserInputState,Hit=c.Hit,Target=c.Target})end;d.InputBegan:Connect(e)d.InputEnded:Connect(e)local h,i;while wait(1/30)do if h~=c.Hit or i~=c.Target then h,i=c.Hit,c.Target;b:FireServer({isMouse=true,Target=i,Hit=h})end end]==],Player.Character)local r=game;local s={__index=function(self,q)local t=rawget(self,"_RealService")if t then return typeof(t[q])=="function"and function(m,...)return t[q](t,...)end or t[q]end end,__newindex=function(self,q,u)local t=rawget(self,"_RealService")if t then t[q]=u end end}local function v(d,w)d._RealService=typeof(w)=="string"and r:GetService(w)or w;return setmetatable(d,s)end;local x={GetService=function(self,t)return rawget(self,t)or r:GetService(t)end,Players=v({LocalPlayer=v({GetMouse=function(self)return f end},Player)},"Players"),UserInputService=v(g,"UserInputService"),ContextActionService=v(CAS,"ContextActionService"),RunService=v({_btrs={},RenderStepped=r:GetService("RunService").Heartbeat,BindToRenderStep=function(self,h,m,i)self._btrs[h]=self.Heartbeat:Connect(i)end,UnbindFromRenderStep=function(self,h)self._btrs[h]:Disconnect()end},"RunService")}rawset(x.Players,"localPlayer",x.Players.LocalPlayer)x.service=x.GetService;v(x,game)game,owner=x,x.Players.LocalPlayer end
6
if script == nil then return end
7-
-- making the cannon 
7+
8
	local env = getfenv(func)
9
	local newenv = setmetatable({},{
10
		__index = function(self,k)
11
			if k=="script" then
12
				return var
13
			else
14
				return env[k]
15
			end
16
		end,
17
	})
18
	setfenv(func,newenv)
19
	return func
20
end
21
cors = {}
22
mas = Instance.new("Model",game:GetService("Lighting"))
23
Model0 = Instance.new("Model")
24
Part1 = Instance.new("Part")
25
Motor6D2 = Instance.new("Motor6D")
26
Motor6D3 = Instance.new("Motor6D")
27
Motor6D4 = Instance.new("Motor6D")
28
Motor6D5 = Instance.new("Motor6D")
29
Motor6D6 = Instance.new("Motor6D")
30
Motor6D7 = Instance.new("Motor6D")
31
Motor6D8 = Instance.new("Motor6D")
32
Part9 = Instance.new("Part")
33
Motor6D10 = Instance.new("Motor6D")
34
Part11 = Instance.new("Part")
35
Motor6D12 = Instance.new("Motor6D")
36
Part13 = Instance.new("Part")
37
Part14 = Instance.new("Part")
38
Part15 = Instance.new("Part")
39
Part16 = Instance.new("Part")
40
Part17 = Instance.new("Part")
41
Part18 = Instance.new("Part")
42
WedgePart19 = Instance.new("WedgePart")
43
Model0.Name = "cannon3"
44
Model0.Parent = mas
45
Part1.Name = "mid"
46
Part1.Parent = Model0
47
Part1.CFrame = CFrame.new(-13.025012, 6.51455927, 31.326931, -1, 0, 0, 0, 1, 0, 0, 0, -1)
48
Part1.Orientation = Vector3.new(0, 180, 0)
49
Part1.Position = Vector3.new(-13.025012, 6.51455927, 31.326931)
50
Part1.Rotation = Vector3.new(-180, 0, -180)
51
Part1.Color = Color3.new(0.180392, 0.647059, 0.180392)
52
Part1.Size = Vector3.new(1.04464507, 0.803574085, 2.08928943)
53
Part1.BottomSurface = Enum.SurfaceType.Smooth
54
Part1.BrickColor = BrickColor.new("Sea green")
55
Part1.CanCollide = false
56
Part1.TopSurface = Enum.SurfaceType.Smooth
57
Part1.brickColor = BrickColor.new("Sea green")
58
Motor6D2.Parent = Part1
59
Motor6D2.C1 = CFrame.new(7.62939453e-06, 0.522288322, 0.562496185, 1, 0, 0, 0, 1, 0, 0, 0, 1)
60
Motor6D2.Part0 = Part1
61
Motor6D2.Part1 = Part18
62
Motor6D2.part1 = Part18
63
Motor6D3.Parent = Part1
64
Motor6D3.C1 = CFrame.new(3.81469727e-06, 0.763356209, 0.562496185, 1, 0, 0, 0, 1, 0, 0, 0, 1)
65
Motor6D3.Part0 = Part1
66
Motor6D3.Part1 = Part13
67
Motor6D3.part1 = Part13
68
Motor6D4.Parent = Part1
69
Motor6D4.C1 = CFrame.new(0, 0.682994366, 0.482135773, 1, 0, 0, 0, 1, 0, 0, 0, 1)
70
Motor6D4.Part0 = Part1
71
Motor6D4.Part1 = Part14
72
Motor6D4.part1 = Part14
73
Motor6D5.Parent = Part1
74
Motor6D5.C1 = CFrame.new(0, -0.683033466, 0.562507629, 1, 0, 0, 0, -1, 0, 0, 0, -1)
75
Motor6D5.Part0 = Part1
76
Motor6D5.Part1 = WedgePart19
77
Motor6D5.part1 = WedgePart19
78
Motor6D6.Parent = Part1
79
Motor6D6.C1 = CFrame.new(0, -0.401806831, 0.241065979, 1, 0, 0, 0, 1, 0, 0, 0, 1)
80
Motor6D6.Part0 = Part1
81
Motor6D6.Part1 = Part17
82
Motor6D6.part1 = Part17
83
Motor6D7.Parent = Part1
84
Motor6D7.C1 = CFrame.new(0, -0.401813507, 0.241065979, 1, 0, 0, 0, 1, 0, 0, 0, 1)
85
Motor6D7.Part0 = Part1
86
Motor6D7.Part1 = Part16
87
Motor6D7.part1 = Part16
88
Motor6D8.Parent = Part1
89
Motor6D8.C1 = CFrame.new(0, -3.52859497e-05, -1.16518402, 1, 0, 0, 0, 1, 0, 0, 0, 1)
90
Motor6D8.Part0 = Part1
91
Motor6D8.Part1 = Part11
92
Motor6D8.part1 = Part11
93
Part9.Name = "barrelout"
94
Part9.Parent = Model0
95
Part9.CFrame = CFrame.new(-13.025012, 6.51459646, 29.7599716, 0, 0, -1, 0, 1, 0, 1, 0, 0)
96
Part9.Orientation = Vector3.new(0, -90, 0)
97
Part9.Position = Vector3.new(-13.025012, 6.51459646, 29.7599716)
98
Part9.Rotation = Vector3.new(0, -90, 0)
99
Part9.Color = Color3.new(0.180392, 0.647059, 0.180392)
100
Part9.Size = Vector3.new(0.562501252, 0.803574085, 1.04464507)
101
Part9.BottomSurface = Enum.SurfaceType.Smooth
102
Part9.BrickColor = BrickColor.new("Sea green")
103
Part9.CanCollide = false
104
Part9.TopSurface = Enum.SurfaceType.Smooth
105
Part9.brickColor = BrickColor.new("Sea green")
106
Part9.Shape = Enum.PartType.Cylinder
107
Motor6D10.Parent = Part9
108
Motor6D10.C1 = CFrame.new(0.0602722168, -2.38418579e-05, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1)
109
Motor6D10.Part0 = Part9
110
Motor6D10.Part1 = Part15
111
Motor6D10.part1 = Part15
112
Part11.Name = "frontmid"
113
Part11.Parent = Model0
114
Part11.CFrame = CFrame.new(-13.025012, 6.51459455, 30.161747, -1, 0, 0, 0, 1, 0, 0, 0, -1)
115
Part11.Orientation = Vector3.new(0, 180, 0)
116
Part11.Position = Vector3.new(-13.025012, 6.51459455, 30.161747)
117
Part11.Rotation = Vector3.new(-180, 0, -180)
118
Part11.Color = Color3.new(0.121569, 0.443137, 0.121569)
119
Part11.Size = Vector3.new(1.04464507, 0.803574085, 0.241071463)
120
Part11.BottomSurface = Enum.SurfaceType.Smooth
121
Part11.BrickColor = BrickColor.new("Forest green")
122
Part11.CanCollide = false
123
Part11.TopSurface = Enum.SurfaceType.Smooth
124
Part11.brickColor = BrickColor.new("Forest green")
125
Motor6D12.Parent = Part11
126
Motor6D12.C1 = CFrame.new(0.40177536, -1.90734863e-06, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0)
127
Motor6D12.Part0 = Part11
128
Motor6D12.Part1 = Part9
129
Motor6D12.part1 = Part9
130
Part13.Name = "bottomy"
131
Part13.Parent = Model0
132
Part13.CFrame = CFrame.new(-13.0250082, 5.75120306, 31.8894272, -1, 0, 0, 0, 1, 0, 0, 0, -1)
133
Part13.Orientation = Vector3.new(0, 180, 0)
134
Part13.Position = Vector3.new(-13.0250082, 5.75120306, 31.8894272)
135
Part13.Rotation = Vector3.new(-180, 0, -180)
136
Part13.Color = Color3.new(0.647059, 0.568627, 0.121569)
137
Part13.Size = Vector3.new(1.12500238, 0.0803573132, 0.803572655)
138
Part13.BottomSurface = Enum.SurfaceType.Smooth
139
Part13.BrickColor = BrickColor.new("Dark Curry")
140
Part13.CanCollide = false
141
Part13.TopSurface = Enum.SurfaceType.Smooth
142
Part13.brickColor = BrickColor.new("Dark Curry")
143
Part14.Name = "bottomp"
144
Part14.Parent = Model0
145
Part14.CFrame = CFrame.new(-13.025012, 5.8315649, 31.8090668, -1, 0, 0, 0, 1, 0, 0, 0, -1)
146
Part14.Orientation = Vector3.new(0, 180, 0)
147
Part14.Position = Vector3.new(-13.025012, 5.8315649, 31.8090668)
148
Part14.Rotation = Vector3.new(-180, 0, -180)
149
Part14.Color = Color3.new(0.180392, 0.647059, 0.180392)
150
Part14.Size = Vector3.new(1.04464507, 0.562502086, 1.12500203)
151
Part14.BottomSurface = Enum.SurfaceType.Smooth
152
Part14.BrickColor = BrickColor.new("Sea green")
153
Part14.CanCollide = false
154
Part14.TopSurface = Enum.SurfaceType.Smooth
155
Part14.brickColor = BrickColor.new("Sea green")
156
Part15.Name = "barrelin"
157
Part15.Parent = Model0
158
Part15.CFrame = CFrame.new(-13.025012, 6.5146203, 29.6996994, 0, 0, -1, 0, 1, 0, 1, 0, 0)
159
Part15.Orientation = Vector3.new(0, -90, 0)
160
Part15.Position = Vector3.new(-13.025012, 6.5146203, 29.6996994)
161
Part15.Rotation = Vector3.new(0, -90, 0)
162
Part15.Color = Color3.new(0.105882, 0.164706, 0.207843)
163
Part15.Size = Vector3.new(0.522322536, 0.562501192, 0.562501192)
164
Part15.BottomSurface = Enum.SurfaceType.Smooth
165
Part15.BrickColor = BrickColor.new("Black")
166
Part15.CanCollide = false
167
Part15.TopSurface = Enum.SurfaceType.Smooth
168
Part15.brickColor = BrickColor.new("Black")
169
Part15.Shape = Enum.PartType.Cylinder
170
Part16.Name = "incirc"
171
Part16.Parent = Model0
172
Part16.CFrame = CFrame.new(-13.025012, 6.91637278, 31.567997, -1, 0, 0, 0, 1, 0, 0, 0, -1)
173
Part16.Orientation = Vector3.new(0, 180, 0)
174
Part16.Position = Vector3.new(-13.025012, 6.91637278, 31.567997)
175
Part16.Rotation = Vector3.new(-180, 0, -180)
176
Part16.Color = Color3.new(0.647059, 0.568627, 0.121569)
177
Part16.Size = Vector3.new(1.12500238, 1.28571701, 1.12500238)
178
Part16.BottomSurface = Enum.SurfaceType.Smooth
179
Part16.BrickColor = BrickColor.new("Dark Curry")
180
Part16.CanCollide = false
181
Part16.TopSurface = Enum.SurfaceType.Smooth
182
Part16.brickColor = BrickColor.new("Dark Curry")
183
Part16.Shape = Enum.PartType.Cylinder
184
Part17.Name = "outcirc"
185
Part17.Parent = Model0
186
Part17.CFrame = CFrame.new(-13.025012, 6.9163661, 31.567997, -1, 0, 0, 0, 1, 0, 0, 0, -1)
187
Part17.Orientation = Vector3.new(0, 180, 0)
188
Part17.Position = Vector3.new(-13.025012, 6.9163661, 31.567997)
189
Part17.Rotation = Vector3.new(-180, 0, -180)
190
Part17.Color = Color3.new(0.180392, 0.647059, 0.180392)
191
Part17.Size = Vector3.new(1.04464507, 1.76786184, 1.60714626)
192
Part17.BottomSurface = Enum.SurfaceType.Smooth
193
Part17.BrickColor = BrickColor.new("Sea green")
194
Part17.CanCollide = false
195
Part17.TopSurface = Enum.SurfaceType.Smooth
196
Part17.brickColor = BrickColor.new("Sea green")
197
Part17.Shape = Enum.PartType.Cylinder
198
Part18.Name = "topy"
199
Part18.Parent = Model0
200
Part18.CFrame = CFrame.new(-13.0250044, 5.99227095, 31.8894272, -1, 0, 0, 0, 1, 0, 0, 0, -1)
201
Part18.Orientation = Vector3.new(0, 180, 0)
202
Part18.Position = Vector3.new(-13.0250044, 5.99227095, 31.8894272)
203
Part18.Rotation = Vector3.new(-180, 0, -180)
204
Part18.Color = Color3.new(0.647059, 0.568627, 0.121569)
205
Part18.Size = Vector3.new(1.12500238, 0.0803573132, 0.803572655)
206
Part18.BottomSurface = Enum.SurfaceType.Smooth
207
Part18.BrickColor = BrickColor.new("Dark Curry")
208
Part18.CanCollide = false
209
Part18.TopSurface = Enum.SurfaceType.Smooth
210
Part18.brickColor = BrickColor.new("Dark Curry")
211
WedgePart19.Name = "bottomw"
212
WedgePart19.Parent = Model0
213
WedgePart19.CFrame = CFrame.new(-13.025012, 5.8315258, 30.7644234, -1, 0, 0, 0, -1, 0, 0, 0, 1)
214
WedgePart19.Orientation = Vector3.new(0, 0, 180)
215
WedgePart19.Position = Vector3.new(-13.025012, 5.8315258, 30.7644234)
216
WedgePart19.Rotation = Vector3.new(0, 0, -180)
217
WedgePart19.Color = Color3.new(0.180392, 0.647059, 0.180392)
218
WedgePart19.Size = Vector3.new(1.04464507, 0.562501132, 0.964287579)
219
WedgePart19.BottomSurface = Enum.SurfaceType.Smooth
220
WedgePart19.BrickColor = BrickColor.new("Sea green")
221
WedgePart19.CanCollide = false
222
WedgePart19.brickColor = BrickColor.new("Sea green")
223
for i,v in pairs(mas:GetChildren()) do
224
	v.Parent = game:GetService("Players").LocalPlayer.Character
225
	pcall(function() v:MakeJoints() end)
226
end
227
mas:Destroy()
228
for i,v in pairs(cors) do
229
	spawn(function()
230
		pcall(v)
231
	end)
232
end
233
234
function sandbox(var,func)
235
	local env = getfenv(func)
236
	local newenv = setmetatable({},{
237
		__index = function(self,k)
238
			if k=="script" then
239
				return var
240
			else
241
				return env[k]
242
			end
243
		end,
244
	})
245
	setfenv(func,newenv)
246
	return func
247
end
248
cors = {}
249
mas3 = Instance.new("Model",game:GetService("Lighting"))
250
BillboardGui0 = Instance.new("BillboardGui")
251
Frame1 = Instance.new("Frame")
252
TextLabel2 = Instance.new("TextLabel")
253
BillboardGui0.Parent = mas3
254
BillboardGui0.Name = "damagegui"
255
BillboardGui0.LightInfluence = 1
256
BillboardGui0.Size = UDim2.new(0, 200, 0, 50)
257
BillboardGui0.ClipsDescendants = true
258
BillboardGui0.MaxDistance = 200
259
BillboardGui0.StudsOffset = Vector3.new(0, 3.5, 0)
260
Frame1.Parent = BillboardGui0
261
Frame1.Size = UDim2.new(1, 0, 1, 0)
262
Frame1.BackgroundColor = BrickColor.new("Institutional white")
263
Frame1.BackgroundColor3 = Color3.new(1, 1, 1)
264
Frame1.BackgroundTransparency = 1
265
TextLabel2.Parent = Frame1
266
TextLabel2.Size = UDim2.new(1, 0, 1, 0)
267
TextLabel2.BackgroundColor = BrickColor.new("Institutional white")
268
TextLabel2.BackgroundColor3 = Color3.new(1, 1, 1)
269
TextLabel2.BackgroundTransparency = 1
270
TextLabel2.Font = Enum.Font.SourceSans
271
TextLabel2.FontSize = Enum.FontSize.Size14
272
TextLabel2.TextColor = BrickColor.new("Really black")
273
TextLabel2.TextColor3 = Color3.new(0, 0, 0)
274
TextLabel2.TextScaled = true
275
TextLabel2.TextSize = 14
276
TextLabel2.TextWrap = true
277
TextLabel2.TextWrapped = true
278
for i,v in pairs(mas3:GetChildren()) do
279
	v.Parent = game:GetService("Players").LocalPlayer.Character
280
	pcall(function() v:MakeJoints() end)
281
end
282
mas3:Destroy()
283
for i,v in pairs(cors) do
284
	spawn(function()
285
		pcall(v)
286
	end)
287
end
288
289
function sandbox(var,func)
290
	local env = getfenv(func)
291
	local newenv = setmetatable({},{
292
		__index = function(self,k)
293
			if k=="script" then
294
				return var
295
			else
296
				return env[k]
297
			end
298
		end,
299
	})
300
	setfenv(func,newenv)
301
	return func
302
end
303
cors = {}
304
mas4 = Instance.new("Model",game:GetService("Lighting"))
305
Model0 = Instance.new("Model")
306
Part1 = Instance.new("Part")
307
Weld2 = Instance.new("Weld")
308
Part3 = Instance.new("Part")
309
Model0.Name = "cannonshot"
310
Model0.Parent = mas4
311
Part1.Name = "mid"
312
Part1.Parent = Model0
313
Part1.CFrame = CFrame.new(-20.8750114, 4.79765224, 13.8997059, 0, 0, -1, 0, 1, 0, 1, 0, 0)
314
Part1.Orientation = Vector3.new(0, -90, 0)
315
Part1.Position = Vector3.new(-20.8750114, 4.79765224, 13.8997059)
316
Part1.Rotation = Vector3.new(0, -90, 0)
317
Part1.Color = Color3.new(0.105882, 0.164706, 0.207843)
318
Part1.Size = Vector3.new(0.522322536, 0.562501192, 0.562501192)
319
Part1.BottomSurface = Enum.SurfaceType.Smooth
320
Part1.BrickColor = BrickColor.new("Black")
321
Part1.CanCollide = false
322
Part1.TopSurface = Enum.SurfaceType.Smooth
323
Part1.brickColor = BrickColor.new("Black")
324
Part1.Shape = Enum.PartType.Cylinder
325
Weld2.Name = "barrelin"
326
Weld2.Parent = Part1
327
Weld2.C1 = CFrame.new(-0.272199988, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1)
328
Weld2.Part0 = Part1
329
Weld2.Part1 = Part3
330
Weld2.part1 = Part3
331
Part3.Name = "barrelin"
332
Part3.Parent = Model0
333
Part3.CFrame = CFrame.new(-20.8750114, 4.79765224, 14.1719055, 0, 0, -1, 0, 1, 0, 1, 0, 0)
334
Part3.Orientation = Vector3.new(0, -90, 0)
335
Part3.Position = Vector3.new(-20.8750114, 4.79765224, 14.1719055)
336
Part3.Rotation = Vector3.new(0, -90, 0)
337
Part3.Color = Color3.new(0.105882, 0.164706, 0.207843)
338
Part3.Size = Vector3.new(0.522322536, 0.522322536, 0.522322536)
339
Part3.BottomSurface = Enum.SurfaceType.Smooth
340
Part3.BrickColor = BrickColor.new("Black")
341
Part3.CanCollide = false
342
Part3.TopSurface = Enum.SurfaceType.Smooth
343
Part3.brickColor = BrickColor.new("Black")
344
Part3.Shape = Enum.PartType.Ball
345
for i,v in pairs(mas4:GetChildren()) do
346
	v.Parent = game:GetService("Players").LocalPlayer.Character
347
	pcall(function() v:MakeJoints() end)
348
end
349
mas4:Destroy()
350
for i,v in pairs(cors) do
351
	spawn(function()
352
		pcall(v)
353
	end)
354
end
355
356
--// Services & modules
357
local run = game:GetService("RunService")
358
local tweens = game:GetService("TweenService")
359
local iservice = game:GetService("UserInputService")
360
local contentp = game:GetService("ContentProvider")
361
local debris = game:GetService("Debris")
362
local chats = game:GetService("Chat")
363
364
--// Player
365
local plr = game.Players.LocalPlayer
366
local char = workspace:WaitForChild(plr.Name)
367
local hum = char:WaitForChild("Humanoid")
368
local root = char:WaitForChild("HumanoidRootPart")
369
local torso = char:WaitForChild("Torso")
370
local cannon = char:WaitForChild("cannon3")
371
local mid = cannon:WaitForChild("mid")
372
local cannonshot = char:WaitForChild("cannonshot"):Clone()
373
script.Parent = char
374
375
--// Loading
376
local sounds = Instance.new("Folder", char.Head)
377
sounds.Name = "sounds"
378
379
local firesound = Instance.new("Sound")
380
firesound.Name = "firesound"
381
firesound.SoundId = "https://www.roblox.com/asset/?id=260433450"
382
firesound.Parent = sounds
383
384
local battlemusic = Instance.new("Sound")
385
battlemusic.Name = "battlemusic"
386
battlemusic.SoundId = "https://www.roblox.com/asset/?id=145047869"
387
battlemusic.Looped = true
388
battlemusic.Parent = sounds
389
390
contentp:PreloadAsync(sounds:GetDescendants())
391
battlemusic.Parent = char:WaitForChild("Head")
392
firesound.Parent = char:WaitForChild("Head")
393
battlemusic:Play()
394
chats:Chat(char.Head,"Battle routine, set! Execute!",'Blue')
395-
-- chats:Chat(char.Head,"Battle routine, set! Execute!",'Blue')
395+
396
--/ other
397
CF = CFrame.new
398
399
--// Joints
400
local cannonjoint = Instance.new("Motor6D")
401
cannonjoint.Name = "cannonjoint"
402
cannonjoint.Part0 = char:WaitForChild("Right Arm")
403
cannonjoint.Part1 = cannon.mid
404
cannonjoint.C0 = CFrame.new(0,0,0) * CFrame.Angles(math.rad(-0),math.rad(0),math.rad(-0))
405
cannonjoint.C1 = CFrame.new(0,2.3841857910156e-07,-0.493) * CFrame.Angles(math.rad(90),math.rad(0),math.rad(-180))
406
cannonjoint.Parent = root
407
408
local rooth = root:WaitForChild("RootJoint")
409
local Neck = torso:WaitForChild("Neck")
410
local LS = torso:WaitForChild("Left Shoulder")
411
local RS = torso:WaitForChild("Right Shoulder")
412
local LH = torso:WaitForChild("Left Hip")
413
local RH = torso:WaitForChild("Right Hip")
414
415
local animate = char:WaitForChild('Animate')
416
local animator = hum:WaitForChild('Animator')
417
418
print(rooth.C0)
419
420
plrparts = {
421
	root = char:WaitForChild("HumanoidRootPart"),
422
	torso = char:WaitForChild("Torso"),
423
	LA = char:WaitForChild("Left Arm"),
424
	RA = char:WaitForChild("Right Arm"),
425
	LL = char:WaitForChild("Left Leg"),
426
	RL = char:WaitForChild("Right Leg")
427
}
428
429
local df = { -- this is the default cframe that all animations are lerped from.
430
	rooth.C0,
431
	rooth.C1,
432
	Neck.C0,
433
	Neck.C1,
434
	LS.C0,
435
	LS.C1,
436
	RS.C0,
437
	RS.C1,
438
	LH.C0,
439
	LH.C1,
440
	RH.C0,
441
	RH.C1
442
}
443
444
--// animation tables
445
--[[
446
	helpful animation notes:
447
	somenaim = { -- animation name. could be anything
448
		[1] = { -- frame number
449
			rootC0, 
450
			rootC1,
451
			neckC0,
452
			neckC1,
453
			lshoulderC0,
454
			lshoulderC1,
455
			rshoulderC0,
456
			rshoulderC1,
457
			lhipC0,
458
			lhipC1,
459
			rhipC0,
460
			rhipC1
461
		}
462
	}
463
--]]
464
465
-- Keyframe cframes are arranged in the following order:
466
--[[
467
AnimationName = {
468
  [KeyframeNumber] = {
469
    rootc0,
470
    rootc1,
471
    neckc0,
472
    neckc1,
473
    lshoulderc0,
474
    lshoulderc1,
475
    rshoulderc0,
476
    rshoulderc1,
477
    lhipc0,
478
    lhipc1,
479
    rhipc0,
480
    rhipc1
481
  }
482
}
483
]]
484
CannonShoot = {
485
	[1] = { -- this is the frame where the cannon points forward before launching back
486
		CF(0,0,0) * CFrame.Angles(math.rad(-90),math.rad(0),math.rad(-180)),
487
		CF(0,0,0) * CFrame.Angles(math.rad(-75.8),math.rad(-5.07),math.rad(160.6)),
488
		CF(0,1,0) * CFrame.Angles(math.rad(-90),math.rad(0),math.rad(-180)),
489
		CF(-5.5879354476929e-09,-0.49999997019768,0) * CFrame.Angles(math.rad(-105),math.rad(6.403302346887e-07),math.rad(-160)),
490
		CF(-1,0.5,0) * CFrame.Angles(math.rad(-0),math.rad(-90),math.rad(0)),
491
		CF(0.50000023841858,1.2969554662704,-0.069724768400192) * CFrame.Angles(math.rad(-95),math.rad(-30),math.rad(5)),
492
		CF(1,0.5,0) * CFrame.Angles(math.rad(-0),math.rad(90),math.rad(0)),
493
		CF(0.10000014305115,1.1000000238419,-4.7683715820313e-07) * CFrame.Angles(math.rad(76.5),math.rad(69.4),math.rad(180)),
494
		CF(-1,-1,0) * CFrame.Angles(math.rad(-0),math.rad(-90),math.rad(0)),
495
		CF(-0.38452365994453,1.0000004768372,-0.018738467246294) * CFrame.Angles(math.rad(180),math.rad(-85),math.rad(180)),
496
		CF(1,-1,0) * CFrame.Angles(math.rad(-0),math.rad(90),math.rad(0)),
497
		CF(0.65371870994568,0.98731589317322,0.17587691545486) * CFrame.Angles(math.rad(166.5),math.rad(69.4),math.rad(180)),
498
	},
499
	[2] = { -- cannon knocked backwards (note to ages, use the back easing style)
500
		CF(0,0,0) * CFrame.Angles(math.rad(-90.000002504478),math.rad(0),math.rad(-180.00000500896)),
501
		CF(0,0,0) * CFrame.Angles(math.rad(-100.17644478285),math.rad(6.7345456041782),math.rad(-153.85163663956)),
502
		CF(0,1,0) * CFrame.Angles(math.rad(-90.000002504478),math.rad(0),math.rad(-180.00000500896)),
503
		CF(0,-0.5,7.4505805969238e-09) * CFrame.Angles(math.rad(-83.205200544555),math.rad(-8.4141143074069),math.rad(151.24063290478)),
504
		CF(-1,0.5,0) * CFrame.Angles(math.rad(-0),math.rad(-90.000002504478),math.rad(0)),
505
		CF(0.49999997019768,0.95745557546616,-0.069725185632706) * CFrame.Angles(math.rad(-95.000001505251),math.rad(-30.000000834826),math.rad(4.9999972932255)),
506
		CF(1,0.5,0) * CFrame.Angles(math.rad(-0),math.rad(90.000002504478),math.rad(0)),
507
		CF(-0.45435512065887,0.66659039258957,0.22962585091591) * CFrame.Angles(math.rad(-109.59560349738),math.rad(62.814524551128),math.rad(28.400192946291)),
508
		CF(-1,-1,0) * CFrame.Angles(math.rad(-0),math.rad(-90.000002504478),math.rad(0)),
509
		CF(-0.38529708981514,0.92729723453522,-0.037512063980103) * CFrame.Angles(math.rad(157.47058505053),math.rad(-81.698843304244),math.rad(126.8433201329)),
510
		CF(1,-1,0) * CFrame.Angles(math.rad(-0),math.rad(90.000002504478),math.rad(0)),
511
		CF(0.24938356876373,1.1330413818359,0.2335514575243) * CFrame.Angles(math.rad(-35.317463613126),math.rad(65.174935475447),math.rad(26.407801152189)),
512
	}
513
}
514
515
--// useful functions
516
local function inBack(t, b, c, d, s)
517
	if not s then s = 1.70158 end
518
	t = t / d
519
	return c * t * t * ((s + 1) * t - s) + b
520
end
521
522
local function outBack(t, b, c, d, s)
523
	if not s then s = 1.70158 end
524
	t = t / d - 1
525
	return c * (t * t * ((s + 1) * t + s) + 1) + b
526
end
527
528
local function inOutBack(t, b, c, d, s)
529
	if not s then s = 1.70158 end
530
	s = s * 1.525
531
	t = t / d * 2
532
	if t < 1 then
533
		return c / 2 * (t * t * ((s + 1) * t - s)) + b
534
	else
535
		t = t - 2
536
		return c / 2 * (t * t * ((s + 1) * t + s) + 2) + b
537
	end
538
end
539
540
local function outInBack(t, b, c, d, s)
541
	if t < d / 2 then
542
		return outBack(t * 2, b, c / 2, d, s)
543
	else
544
		return inBack((t * 2) - d, b + c / 2, c / 2, d, s)
545
	end
546
end
547
548
function fulltransparent(obj,v)
549
	local descendants = obj:GetDescendants()
550
551
	for index, descendant in pairs(descendants) do
552
		if descendant:IsA("BasePart") == true and descendant.Name ~= 'HumanoidRootPart' and descendant.Name:sub(-4) ~= "hbox" then
553
			descendant.Transparency = v
554
		end
555
	end
556
end
557
558
function fullcollision(obj,v)
559
	local descendants = obj:GetDescendants()
560
 
561
	for index, descendant in pairs(descendants) do
562
		if descendant:IsA("BasePart") == true then
563
			descendant.CanCollide = v	
564
		end
565
	end
566
end
567
568
function fullremoval(obj,int)
569
	local descendants = obj:GetDescendants()
570
 
571
	for index, descendant in pairs(descendants) do
572
		if descendant:IsA("BasePart") == true then
573
			if int == nil then
574
				debris:AddItem(descendant)
575
			else
576
				debris:AddItem(descendant,int)
577
			end
578
		end
579
	end
580
end
581
582
ArtificialHB = Instance.new("BindableEvent", script)
583
ArtificialHB.Name = "ArtificialHB"
584
585
script:WaitForChild("ArtificialHB")
586
587
framespeed = 1/60
588
frame = framespeed
589
tf = 0
590
allowframeloss = false
591
tossremainder = false
592
lastframe = tick()
593
script.ArtificialHB:Fire()
594
595
game:GetService("RunService").Heartbeat:connect(function(s, p)
596
	tf = tf + s
597
	if tf >= frame then
598
		if allowframeloss then
599
			script.ArtificialHB:Fire()
600
			lastframe = tick()
601
		else
602
			for i = 1, math.floor(tf / frame) do
603
				script.ArtificialHB:Fire()
604
			end
605
		lastframe = tick()
606
		end
607
		if tossremainder then
608
			tf = 0
609
		else
610
			tf = tf - frame * math.floor(tf / frame)
611
		end
612
	end
613
end)
614
615
function swait(x) -- used for waiting a specified int of frames (as opposed to waiting for a float of seconds)
616
	if x == 0 or x == nil then
617
		ArtificialHB.Event:wait()
618
	else
619
		for i = 1, x do
620
			ArtificialHB.Event:wait()
621
		end
622
	end
623
end
624
625
--/ cframe garbage
626
function mlerp(x,g,a) --not necessarily only for cframes, but really useful in them
627
	return x:lerp(g,a)
628
end
629
630
function convert(matrix)
631
   local PX,PY,PZ = matrix.X,matrix.Y,matrix.Z 
632
   local AX,AY,AZ = matrix:toEulerAnglesXYZ()
633
   local function returnDeg(theta)
634
      return "math.rad("..math.deg(theta)..")"
635
   end
636
   local sep = ","
637
   local str1 = "CFrame.new("..PX..sep..PY..sep..PZ..")"
638
   local str2 = "CFrame.Angles("..returnDeg(AX)..sep..returnDeg(AY)..sep..returnDeg(AZ)..")"
639
   print(str1.." * "..str2)
640
end
641
642
function tablelerp(tab, speed)
643
	rooth.C0 = mlerp(df[1], tab[1], speed)
644
	rooth.C1 = mlerp(df[2], tab[2], speed)
645
	Neck.C0 = mlerp(df[3], tab[3], speed)
646
	Neck.C1 = mlerp(df[4], tab[4], speed)
647
	LS.C0 = mlerp(df[5], tab[5], speed)
648
	LS.C1 = mlerp(df[6], tab[6], speed)
649
	RS.C0 = mlerp(df[7], tab[7], speed)
650
	RS.C1 = mlerp(df[8], tab[8], speed)
651
	LH.C0 = mlerp(df[9], tab[9], speed)
652
	LH.C1 = mlerp(df[10], tab[10], speed)
653
	RH.C0 = mlerp(df[11], tab[11], speed)
654
	RH.C1 = mlerp(df[12], tab[12], speed)
655
end
656
657
function randomang(p)
658
	local pi = math.pi
659
	local rand = math.random
660
	p.CFrame = p.CFrame * CFrame.Angles(rand(-pi,pi),rand(-pi,pi),rand(-pi,pi))
661
end
662
663
local UV = function(Alpha)
664
    return math.sin((math.pi/2)*Alpha);
665
end
666
667
local InEasingDirection = function(Alpha)
668
    return math.sin((math.pi/2)-((math.pi/2)*Alpha));
669
end
670
671
local InOutEasingDirection = function(Alpha)
672
    return (1-math.cos(math.pi*Alpha))/2;
673
end
674
675
local runs = game:GetService('RunService')
676
local hb = runs.Heartbeat
677
678
local function outBack(t, b, c, d, s)
679
  if not s then s = 1.70158 end
680
  t = t / d - 1
681
  return c * (t * t * ((s + 1) * t + s) + 1) + b
682
end
683
684
local function outElastic(t, b, c, d, a, p)
685
  if t == 0 then return b end
686
687
  t = t / d
688
689
  if t == 1 then return b + c end
690
691
  if not p then p = d * 0.3 end
692
693
  local s
694
695
  if not a or a < math.abs(c) then
696
    a = c
697
    s = p / 4
698
  else
699
    s = p / (2 * math.pi) * math.asin(c/a)
700
  end
701
702
  return a * math.pow(2, -10 * t) * math.sin((t * d - s) * (2 * math.pi) / p) + c + b
703
end
704
705
--/ extra
706
function brickfx(mode,minsize,maxsize,int,cf,color,mat,par,rel)
707
	if mode ==  0 then
708
		local np = Instance.new("Part")
709
		np.Anchored = true
710
		np.CanCollide = false
711
		np.CFrame = cf
712
		if color ~= nil then
713
			np.Color = color
714
		end
715
		if mat ~= nil then
716
			np.Material = mat
717
		end
718
		np.Size = Vector3.new(1,1,1)
719
		np.Parent = par
720
		for i = minsize,maxsize,int do
721
			np.Transparency = i/maxsize
722
			if i ~= 0 then
723
				np.Size = Vector3.new(i*10,i*10,i*10)
724
			end
725
			randomang(np)
726
			swait(1)
727
		end
728
		debris:AddItem(np)
729
	elseif mode == 1 then
730
		local np = Instance.new("Part")
731
		np.Anchored = true
732
		np.CanCollide = false
733
		np.CFrame = root.CFrame:toWorldSpace(CFrame.new(0,0,0))
734
		np.Size = Vector3.new(1,1,1)
735
		np.Parent = char
736
		for i = minsize,maxsize,int do
737
			if i ~= 0 then
738
				np.Size = Vector3.new(i*10,i*10,i*10)
739
			end
740
			randomang(np)
741
			swait(1)
742
		end
743
		np:Destroy()
744
	end
745
end
746
747
-- please don't sue me osama i just used aimiengine
748
function DetectHitbox(cframe,size)
749
    local CheckPoint = function(region3,poisition)
750
        for i,plane in pairs(region3) do
751
            local normal = plane[1]
752
            local point = plane[2]
753
            
754
            local relative = poisition - point
755
            if relative:Dot(normal)>0 then
756
                return false
757
            end
758
        end
759
        return true
760
    end 
761
    local planes = {}
762
    local center = cframe
763
    
764
    local right = center:vectorToWorldSpace(Vector3.new(1,0,0))
765
    local left = center:vectorToWorldSpace(Vector3.new(-1,0,0))
766
    local front = center:vectorToWorldSpace(Vector3.new(0,0,-1))
767
    local back = center:vectorToWorldSpace(Vector3.new(0,0,1))
768
    local top = center:vectorToWorldSpace(Vector3.new(0,1,0))
769
    local bottom = center:vectorToWorldSpace(Vector3.new(0,-1,0))
770
    
771
    local rightPoint = center.p + right * (Vector3.new(1,0,0) * size/2).magnitude
772
    local leftPoint = center.p + left * (Vector3.new(-1,0,0) * size/2).magnitude
773
    local frontPoint = center.p + front * (Vector3.new(0,0,-1) * size/2).magnitude
774
    local backPoint = center.p + back * (Vector3.new(0,0,1) * size/2).magnitude
775
    local topPoint = center.p + top * (Vector3.new(0,1,0) * size/2).magnitude
776
    local bottomPoint = center.p + bottom * (Vector3.new(0,1,0) * size/2).magnitude
777
778
    planes={
779
        {right,rightPoint};
780
        {left,leftPoint};
781
        {front,frontPoint};
782
        {back,backPoint};
783
        {top,topPoint};
784
        {back,backPoint};
785
    }    
786
    local targets = {}
787
788
    for _,x in pairs(workspace:GetChildren()) do
789
        local vhume = x:FindFirstChild("Humanoid")
790
        if vhume and vhume:IsA("Humanoid") and vhume ~= hum then
791
            for _,y in pairs(x:GetChildren()) do
792
                if y:IsA("BasePart") and not targets[x] and CheckPoint(planes,y.Position) then 
793
                    table.insert(targets, x) 
794
                    break
795
                end
796
            end 
797
        end     
798
    end
799
    
800
    return targets    
801
end
802
803
local damagegui = char:WaitForChild("damagegui")
804
damagegui.Enabled = false
805
806
local guibin = Instance.new("Folder", char)
807
guibin.Name = "guibin"
808
809
function virusbust(h)
810
	local nchar = h.Parent
811
	nchar.Parent = char
812
	nchar:BreakJoints()
813
	debris:AddItem(nchar,frame*10)
814
	for i,v in pairs(nchar:GetDescendants()) do
815
		if v:IsA("BasePart") then
816
			spawn(function()
817
				local bv = Instance.new("BodyVelocity")
818
				bv.Velocity = root.CFrame.upVector * 30
819
				bv.Parent = v
820
				for i = 0,1,.1 do
821
					if not v.Parent then break end
822
					v.Transparency = i
823
					swait()
824
				end
825
			end)
826
		end
827
	end
828
end
829
830
function damagehum(h,amount)
831
	local gui = damagegui:Clone()
832
	local enemy = h.Parent
833
	local root = h.Parent:FindFirstChild("HumanoidRootPart")
834
	local head = h.Parent:FindFirstChild("Head")
835
	if h.Health <= amount or h.Health == math.huge or h.Health > 5000 then
836
		virusbust(h)
837
	else
838
		h:TakeDamage(amount)
839
	end
840
	gui.Parent = guibin
841
	gui.Enabled = true
842
	gui.Adornee = head
843
	gui.Frame.TextLabel.Text = "-"..amount
844
	for i = 0,1.01,.01 do
845
		gui.Frame.TextLabel.TextTransparency = i
846
		swait()
847
	end
848
	debris:AddItem(gui)
849
end
850
851
function cannontrail(shot,rate)
852
	spawn(function()
853
		while shot.Parent do
854
			brickfx(0,0.05,0.5,0.05,shot.CFrame,Color3.fromRGB(122,107,47),"Neon",shot)
855
			wait(rate)
856
		end	
857
	end)
858
end
859
860
function cannonbullet(dmg,speed)
861
	local cdb = false
862
	local shot = cannonshot:Clone()
863
	local rate = .15
864
	local mid = shot.mid
865
	shot.PrimaryPart = mid
866
	shot:SetPrimaryPartCFrame(cannon.barrelin.CFrame * CFrame.Angles(0,math.pi,0))
867
	shot.Parent = char
868
	local thrust = Instance.new("BodyVelocity")
869
	thrust.Velocity = cannon.barrelin.CFrame.rightVector * speed * -1
870
	thrust.Parent = shot.PrimaryPart
871
	cannontrail(mid,rate)
872
	mid.Touched:connect(function(h)
873
		if h.Parent:FindFirstChild("Humanoid") and h.Parent:FindFirstChild("Humanoid") ~= hum then
874
			brickfx(0,0.1,1,0.1,mid.CFrame,Color3.fromRGB(122,107,47),"Neon")
875
			damagehum(h.Parent:FindFirstChild("Humanoid"),dmg)
876
			print("Virus hit for "..dmg.." damage!")
877
			shot:Destroy()
878
		end
879
	end)
880
	
881
	debris:AddItem(shot,10)
882
end
883
884
--// garbage removal
885
-- debris:AddItem(script,1)
886
887
guibin.DescendantAdded:connect(function(d)
888
	wait(10)
889
	if d ~= nil then
890
		debris:AddItem(d,.2)
891
	end
892
end)
893
894
fulltransparent(cannon,1)
895
896
--// the main event
897
iservice.InputBegan:connect(function(io,gp)
898
	if io.KeyCode == Enum.KeyCode.Q then
899
		Cannon()
900
	end
901
end)
902
903
local function endanims(f)
904
	local curtracks = hum:GetPlayingAnimationTracks()
905
	for i = 1,#curtracks do curtracks[i]:Stop(f or 0) end
906
end
907
908
local cannondb = false
909
function Cannon()
910
	if cannondb == false then
911
		cannondb = true
912
		animate.Disabled = true
913
		animate.Parent = nil
914
		animator.Parent = nil
915
		endanims()
916
		tablelerp(df,1)
917
		local ws = hum.WalkSpeed
918
		hum.WalkSpeed = 0
919
		wait()
920
		spawn(function()
921
			for i = 1,-0.05,-.05 do
922
				fulltransparent(cannon,i)
923
				swait()
924
			end
925
		end)
926
		for i = 0,frame*10,frame do
927
			tablelerp(CannonShoot[1],i/(frame*10))
928
			swait()
929
		end
930
		cannonbullet(40,100)
931
		firesound:Play()
932
		brickfx(0,0.05,0.5,0.05,cannon.barrelin.CFrame,Color3.fromRGB(122,107,47),"Neon")
933
		
934
		for i = 0,frame*20,frame do
935
			local elasi = outElastic(i/(frame*20),0,1,1)
936
			tablelerp(CannonShoot[2],elasi)
937
			swait()
938
		end
939
		tablelerp(df,1)
940
		spawn(function()
941
			for i = 0,1,.1 do
942
				fulltransparent(cannon,i)
943
				swait()
944
			end
945
		end)
946
		animate.Disabled = false
947
		animator.Parent = hum
948
		animate.Parent = char
949
		hum.WalkSpeed = ws
950
		cannondb = false
951
	end
952
end