potions v2
local Blood = {}
local Part = Instance.new("Part")
Part.BottomSurface = Enum.SurfaceType.Smooth
Part.TopSurface = Enum.SurfaceType.Smooth
Part.Anchored = true
Part.CanCollide = false
Part.Color = BrickColor.new("Maroon").Color
Part.Material = Enum.Material.Glass
Part.Size = Vector3.new(0.15, 0.15, 1)
local Mesh = Instance.new("SpecialMesh")
Mesh.MeshType = Enum.MeshType.Sphere
Mesh.Parent = Part
local PhysicsStep = 1 / 240
local Gravity = Vector3.new(0, -workspace.Gravity, 0)
local function GetPosition(p0, v0, dt)
return p0 + v0 * dt + 0.5 * Gravity * (dt ^ 2) + 0.5 * PhysicsStep * Gravity * dt
end
local RenderList = {}
local Param = RaycastParams.new()
Param.FilterDescendantsInstances = {script, owner.Character}
local Callback
function Blood:Create(Position, Velocity, Color)
local NewObject = Part:Clone()
NewObject.Position = Position
NewObject.Color = Color or Color3.new(0.5, 0, 0)
NewObject.Parent = script
RenderList[NewObject] = {
Origin = Position,
Acceleration = Velocity,
Lifetime = 0,
LastPosition = Position
}
end
function Blood:OnHit(NewCallback)
Callback = NewCallback
end
function Blood:Update(DeltaTime)
for Part, Object in RenderList do
Object.Lifetime += DeltaTime
local Position = GetPosition(Object.Origin, Object.Acceleration, Object.Lifetime)
Part.CFrame = CFrame.lookAt(Object.LastPosition, Position)
local Vector = Position - Object.LastPosition
local Hit = workspace:Raycast(Object.LastPosition, Vector, Param)
if Hit then
Callback(Part, Object, Hit)
RenderList[Part] = nil
continue
end
Object.LastPosition = Position
Part.Size = Vector3.new(0.25, 0.25, Vector.Magnitude)
end
end
Blood:OnHit(function(Part, Data, Result)
local s = math.random(100, 250)/450
Part.Size = Vector3.new(s, 0.1, s)
Part.Anchored = false
Part.CFrame = CFrame.lookAt(Result.Position, Result.Position + Result.Normal) * CFrame.Angles(math.pi/2,0,0)
local Weld = Instance.new("WeldConstraint")
Weld.Part0 = Result.Instance
Weld.Part1 = Part
Weld.Parent = Part
local SFX = Instance.new("Sound")
SFX.SoundId = "rbxassetid://9120590980"
SFX.Parent = Part
SFX:Play()
task.delay(7, game.Destroy, Part)
end)
return BloodINFO