I realized that there is an error in this script that prevents the part from shooting normally. Part of it flies when you click on the mouse the wrong place to aim. Who can solve this problem. Here is the first code - PaintballShooter:

Tool = script.Parent

colors = {45, 119, 21, 24, 23, 105, 104}

function fire(v)

Tool.Handle.Fire:play()


local vCharacter = Tool.Parent
local vPlayer = game.Players:playerFromCharacter(vCharacter)

local missile = Instance.new("Part")

    

local spawnPos = vCharacter.PrimaryPart.Position



spawnPos  = spawnPos + (v * 8)

missile.Position = spawnPos
missile.Size = Vector3.new(1,1,1)
missile.Velocity = v * 100
missile.BrickColor = BrickColor.new(colors[math.random(1, #colors)])
missile.Shape = 0
missile.BottomSurface = 0
missile.TopSurface = 0
missile.Name = "Paintball"
missile.Elasticity = 0
missile.Reflectance = 0
missile.Friction = .9

local force = Instance.new("BodyForce")
force.force = Vector3.new(0,90 * missile:GetMass(),0)
force.Parent = missile

Tool.BrickCleanup:clone().Parent = missile

local new_script = script.Parent.Paintball:clone()
new_script.Disabled = false
new_script.Parent = missile

local creator_tag = Instance.new("ObjectValue")
creator_tag.Value = vPlayer
creator_tag.Name = "creator"
creator_tag.Parent = missile



missile.Parent = game.Workspace

end

Tool.Enabled = true function onActivated()

if not Tool.Enabled then
	return
end

Tool.Enabled = false

local character = Tool.Parent;
local humanoid = character.Humanoid
if humanoid == nil then
	print("Humanoid not found")
	return 
end

local targetPos = humanoid.TargetPoint
local lookAt = (targetPos - character.Head.Position).unit

fire(lookAt)

wait(.5)

Tool.Enabled = true

end

script.Parent.Activated:connect(onActivated)

Second part of Code - Paintball:

ball = script.Parent damage = 2

function onTouched(hit) 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 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)
	ball.BrickCleanup:clone().Parent = s
	s.BrickCleanup.Disabled = false
	s.Parent = game.Workspace
	
end


if humanoid ~= nil then
	tagHumanoid(humanoid)
	humanoid:TakeDamage(damage)
	wait(2)
	untagHumanoid(humanoid)
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.Parent = nil

1 comment

0

Don't post long code you have no idea what does and ask other people to fix it for you. Also use code blocks