84 lines
1.7 KiB
Lua
84 lines
1.7 KiB
Lua
local ball = script.Parent
|
|
local damage = 20
|
|
|
|
function onTouched(hit)
|
|
if not (hit.CanCollide and hit.Parent) then
|
|
return
|
|
end
|
|
|
|
local humanoid = hit.Parent:findFirstChild("Humanoid")
|
|
|
|
if hit:GetMass() < 1.2 * 200 then
|
|
hit.BrickColor = ball.BrickColor
|
|
end
|
|
|
|
-- make a splat
|
|
for i = 1, 3 do
|
|
local s = Instance.new("Part")
|
|
s.Shape = 1 -- block
|
|
s.formFactor = 2 -- plate
|
|
s.Size = Vector3.new(1,.4,1)
|
|
s.BrickColor = ball.BrickColor
|
|
|
|
local cleanup = ball.BrickCleanup:Clone()
|
|
cleanup.Disabled = false
|
|
cleanup.Parent = s
|
|
|
|
local v = Vector3.new(math.random(-1, 1), math.random(0, 1), math.random(-1, 1))
|
|
s.Velocity = 15 * v
|
|
s.CFrame = CFrame.new(ball.Position + v, v)
|
|
|
|
s.Parent = workspace
|
|
end
|
|
|
|
|
|
if humanoid ~= nil then
|
|
local canDamage = true
|
|
local tag = ball:FindFirstChild("creator")
|
|
local char = humanoid:FindFirstAncestorWhichIsA("Model")
|
|
|
|
if tag and char then
|
|
local creator = tag.Value
|
|
local player = game.Players:GetPlayerFromCharacter(char)
|
|
if creator and player then
|
|
if creator.Team and player.Team and creator.Team == player.Team then
|
|
canDamage = false
|
|
end
|
|
end
|
|
end
|
|
|
|
if canDamage then
|
|
tagHumanoid(humanoid)
|
|
humanoid:TakeDamage(damage)
|
|
wait(2)
|
|
untagHumanoid(humanoid)
|
|
end
|
|
end
|
|
|
|
connection:disconnect()
|
|
ball.Parent = nil
|
|
end
|
|
|
|
function tagHumanoid(humanoid)
|
|
-- todo: make tag expire
|
|
local tag = ball:findFirstChild("creator")
|
|
if tag ~= nil then
|
|
local new_tag = tag:clone()
|
|
new_tag.Parent = humanoid
|
|
end
|
|
end
|
|
|
|
function untagHumanoid(humanoid)
|
|
if humanoid ~= nil then
|
|
local tag = humanoid:findFirstChild("creator")
|
|
if tag ~= nil then
|
|
tag.Parent = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
connection = ball.Touched:Connect(onTouched)
|
|
|
|
wait(8)
|
|
ball:Destroy()
|