Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

How to make a rocket launcher with a clip system?

I am trying to edit the default rocket launcher so it has a clip system wich means I want the rocket launcher too shoot 5 times until it has too reload instead of shoot reload shoot reload. Can anybody tell me how to do this? This is the code in the rocket launcher:

local Tool = script.Parent
local Launcher = Tool.Handle

local Rocket = Instance.new("Part")
Rocket.Locked = true
Rocket.BackSurface = 3
Rocket.BottomSurface = 3
Rocket.FrontSurface = 3
Rocket.LeftSurface = 3
Rocket.RightSurface = 3
Rocket.TopSurface = 3
Rocket.Size = Vector3.new(1, 2.5, 1)
Rocket.BrickColor = BrickColor.new(23)
Rocket.FormFactor = 3


local rocketMesh = Instance.new("SpecialMesh")
rocketMesh.MeshId = "http://www.roblox.com/asset/?id=31601976"
rocketMesh.TextureId = "http://www.roblox.com/asset/?id=31601599"
rocketMesh.Parent = Rocket

local debris = game:GetService("Debris")

local swooshSound
local explosionSound

local vCharacter
local vPlayer

function blow(hit, missile)
	if missile  == nil then return end
	if swooshSound then swooshSound:stop() end
	explosion = Instance.new("Explosion")
	explosion.Position = missile.Position
	-- find instigator tag
	local creator = missile:FindFirstChild("creator")
	explosion.Hit:connect(function(part, distance) onPlayerBlownUp(part, distance, creator) end)
	explosion.Parent = game.Workspace	
	if explosionSound then explosionSound:Play() end
	wait(.1)
	if missile then missile:Remove() end
end

function onPlayerBlownUp(part, distance, creator)
	if part.Name == "Head" or part.Name == "Torso" then	
		local humanoid = part.Parent.Humanoid
		tagHumanoid(humanoid, creator)
	end
end

function tagHumanoid(humanoid, creator)
	-- tag does not need to expire if all explosions lethal	
	if creator ~= nil then
		local new_tag = creator:clone()
		new_tag.Parent = humanoid		
	end
end

function fire(vTarget)
	local vCharacter = Tool.Parent	
	local vHandle = Tool:findFirstChild("Handle")
	if vHandle == nil then
		print("Handle not found")
		return 
	end
	local direction = vTarget - vHandle.Position
	direction = computeDirection(direction)
	local missile = Rocket:clone()
	local pos = vHandle.Position + (direction * 10.0)		
	missile.CFrame = CFrame.new(pos,  pos + direction) * CFrame.Angles(math.pi/2, 0, 0)

	local creator_tag = Instance.new("ObjectValue")

	local vPlayer = game.Players:GetPlayerFromCharacter(vCharacter)

	if vPlayer == nil then
		print("Player not found")
	else
		if (vPlayer.Neutral == false) then -- nice touch
			missile.BrickColor = vPlayer.TeamColor
		end
	end

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

	missile.Velocity = direction * 20.0

	creator_tag.Value = vPlayer
	creator_tag.Name = "creator"
	creator_tag.Parent = missile	

	missile.Parent = game.Workspace

	if swooshSound then swooshSound:Play() end

	missile.Touched:connect(function(hit) blow(hit, missile) end)

	debris:AddItem(missile, 100.0)
end

function computeDirection(vec)
	local lenSquared = vec.magnitude * vec.magnitude
	local invSqrt = 1 / math.sqrt(lenSquared)
	return Vector3.new(vec.x * invSqrt, vec.y * invSqrt, vec.z * invSqrt)
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

	swooshSound = Launcher:FindFirstChild("Swoosh")
	explosionSound = Launcher:FindFirstChild("Explosion")

	local targetPos = humanoid.TargetPoint

	fire(targetPos)

	wait(7)

	Tool.Enabled = true
end


script.Parent.Activated:connect(onActivated)


This is the part wich makes it shoot:

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

	swooshSound = Launcher:FindFirstChild("Swoosh")
	explosionSound = Launcher:FindFirstChild("Explosion")

	local targetPos = humanoid.TargetPoint

	fire(targetPos)

	wait(7)

	Tool.Enabled = true
end


script.Parent.Activated:connect(onActivated)

If I just copy and paste it 5 times and reduce the wait it won't work as I want it to work if I do that and I shoot once 5 bullets will come out 0,5 sec after each other and then a reload what I want is:

Click Shoot Click Shoot Click Shoot Click Shoot Click Shoot Click Shoot

What it does: Click Shoot Shoot Shoot Shoot Shoot

Anyone knows how to do this?

1 answer

This discussion is preserved as it was. New answers, comments, and votes are closed.