I have kinda similar blood system that can be turned on in my game:
Here’s what i did (I will just tell how is it): (You can change anything you want)
I created remote event in ReplicatedStorage and called it “GoreEvent”
I made BloodPuddle part inside ReplicatedStorage.Misc that is part with special mesh: sphere
and there is local script:
![image](//devforum-uploads.s3.dualstack.us-east-2.amazonaws.com/uploads/original/4X/d/8/7/d87c2b08e385d71ba475f22cb595ad17633df8d5.png)
wait()
game:GetService("TweenService"):Create(script.Parent, TweenInfo.new(math.random(0,20)/10), {Size = Vector3.new(math.random(10,250)/10, 0.14, math.random(10,250)/10)}):Play()
wait(6)
game:GetService("TweenService"):Create(script.Parent, TweenInfo.new(1), {Transparency = 1}):Play()
wait(1)
script.Parent:Destroy()
–
I made BloodDrip part inside ReplicatedStorage.Misc
BloodDrip is a sphere with 0.1 size and local script inside:
![image](//devforum-uploads.s3.dualstack.us-east-2.amazonaws.com/uploads/original/4X/2/d/7/2d7be425115d2178a3aebd58c74fe3a412db9870.png)
game:GetService("RunService").RenderStepped:Connect(function()
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Blacklist
local t = {script.Parent, script.Parent.Parent}
--for i,v in pairs(workspace:GetChildren())do
-- if v:IsA("Instance") then
-- table.insert(t, #t+1, v)
-- end
--end
params.FilterDescendantsInstances = t
local ray = workspace:Raycast(script.Parent.Position, Vector3.new(0,-1,0), params)
if ray then
if ray.Instance.Anchored == true and ray.Instance.CanCollide == true then
local s = game.ReplicatedStorage.MiscObjects.BloodPuddle:Clone()
s.Parent = script.Parent.Parent
s.Color = script.Parent.Color
s.Position = ray.Position
script.Parent:Destroy()
end
end
end)
–
I have local script in StarterCharacterScripts:
game.ReplicatedStorage.GoreEvent.OnClientEvent:Connect(function(amount, pos)
--if game.Players.LocalPlayer:FindFirstChild("Gore") then --If player has Gore enabled
for i = 1,amount do
local d = game.ReplicatedStorage.MiscObjects.BloodDrip:Clone()
d.Parent = script.Parent
d.Position = pos+Vector3.new(0,3,0)
d.Velocity = Vector3.new(math.random(-75,75), math.random(0,75), math.random(-75,75))
game.Debris:AddItem(d,5)
end
if math.random(1,3) == 1 then
local meat = game.ReplicatedStorage.MiscObjects.Meat:Clone()
meat.Parent = workspace
meat.CFrame = CFrame.new(pos+Vector3.new(0,3,0))
if math.random(1,5) == 1 then
meat.Bone.Transparency = 0
end
meat.Size = Vector3.new(math.random(10,20)/10,math.random(10,20)/10,math.random(10,20)/10)
meat.Velocity = Vector3.new(math.random(-75,75), math.random(0,75), math.random(-75,75))
game.Debris:AddItem(meat, 3)
end
--end --End related to check if player has Gore enabled
end)
–
And so, you can just call GoreEvent from server like this:
--Server Script = Not Local
GoreEvent:FireAllClients(10, position) --10 is amount of blood and position is from where the blood goes
I hope it helped you, if you can’t understand something, im on way to answer.