92 lines
1.9 KiB
Lua
92 lines
1.9 KiB
Lua
r = game:service("RunService")
|
|
|
|
shaft = script.Parent
|
|
position = Vector3.new(0,0,0)
|
|
debris = game:GetService("Debris")
|
|
|
|
function tagHumanoid(humanoid)
|
|
-- todo: make tag expire
|
|
local tag = shaft:findFirstChild("creator")
|
|
if tag ~= nil then
|
|
-- kill all other tags
|
|
while(humanoid:findFirstChild("creator") ~= nil) do
|
|
humanoid:findFirstChild("creator").Parent = nil
|
|
end
|
|
|
|
local new_tag = tag:clone()
|
|
new_tag.Parent = humanoid
|
|
debris:AddItem(new_tag, 1)
|
|
end
|
|
end
|
|
|
|
local function onExplosionHit(hit)
|
|
local char = hit:FindFirstAncestorWhichIsA("Model")
|
|
if char then
|
|
local humanoid = char:FindFirstChild("Humanoid")
|
|
if humanoid then
|
|
tagHumanoid(humanoid)
|
|
end
|
|
end
|
|
end
|
|
|
|
function fly()
|
|
local direction = shaft.CFrame.lookVector
|
|
position = position + direction
|
|
shaft.Velocity = position - shaft.Position
|
|
end
|
|
|
|
function blow(hit)
|
|
local canExplode = true
|
|
local char = hit:FindFirstAncestorWhichIsA("Model")
|
|
|
|
if char then
|
|
local humanoid = char:FindFirstChild("Humanoid")
|
|
if humanoid then
|
|
local tag = shaft:FindFirstChild("creator")
|
|
local player = game.Players:GetPlayerFromCharacter(char)
|
|
if tag and player and tag.Value == player then
|
|
canExplode = false
|
|
end
|
|
end
|
|
end
|
|
|
|
if canExplode then
|
|
local tag = shaft:FindFirstChild("creator")
|
|
swoosh:Stop()
|
|
|
|
if tag then
|
|
local explosion = Instance.new("Explosion")
|
|
explosion.Position = shaft.Position
|
|
tag:Clone().Parent = explosion
|
|
explosion.Parent = workspace
|
|
explosion.Hit:Connect(onExplosionHit)
|
|
connection:disconnect()
|
|
shaft.Explosion:Play()
|
|
shaft.Anchored = true
|
|
shaft.CanCollide = false
|
|
shaft.Transparency = 1
|
|
|
|
shaft.Explosion:Play()
|
|
shaft.Explosion.Ended:Wait()
|
|
shaft:Destroy()
|
|
end
|
|
end
|
|
end
|
|
|
|
t, s = r.Stepped:wait()
|
|
|
|
swoosh = script.Parent.Swoosh
|
|
swoosh:Play()
|
|
|
|
position = shaft.Position
|
|
d = t + 10.0 - s
|
|
connection = shaft.Touched:connect(blow)
|
|
|
|
while t < d do
|
|
fly()
|
|
t = r.Stepped:wait()
|
|
end
|
|
|
|
swoosh:Stop()
|
|
shaft:remove()
|