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

After unequipping tool, script.Parent.Activated:Connect executes twice?

WARNING: VERY CRAPPY CODE!

Whenever I unequip my gun (not dropping) and re-equip, it works normally except for

script.Parent.Activated:Connect(function() @ (Line 81)

The line executes multiple times for a reason I cant explain. Here is my local script:

-- Preference Locals
local MaxAmmo = 1
local ShootDelay = 0.2
local MaxCamShake = 1
local ReloadTime = 7.5
-- Main Locals
local Unequipped = false
local Ammo = MaxAmmo
local Reloading = false
local MuzzleOn = false
local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:wait()
local humanoid = char:WaitForChild("Humanoid")
local Mouse = game.Players.LocalPlayer:GetMouse()
local camera = workspace.CurrentCamera
local counter = 0


--Animation Locals
local AnimationStatus = "Off"
local animationOn = script.Parent:WaitForChild('On')
local On = humanoid:LoadAnimation(animationOn)

--Main Stuff lol
--I suck at coding but ill optimize this crap latrrrr
--here i am procrastinating by adding useless green text thats probably gonna be removesd later
local function nowits6rlly()
	if AnimationStatus == "On" then
		On:Play()
		On.Looped = true
	elseif AnimationStatus == "Off" then
		On:Stop()
		On.Looped = false
	end
end

local function CreateMotor6D()
	local PlayerGunConnect = Instance.new("Motor6D")
	PlayerGunConnect.Part0 = player.Character:WaitForChild("Right Arm")
	PlayerGunConnect.Part1 = script.Parent.MainAssembly
	PlayerGunConnect.C0 = CFrame.new(0,-3.5,-0.63)
	PlayerGunConnect.C1 = CFrame.Angles(math.rad(90), 0, math.rad(180))
	PlayerGunConnect.Parent = script.Parent.Motor6D
end

local function DestroyMotor6D()
	local test = script.Parent.Motor6D:FindFirstChild("Motor6D")
	if test then
		script.Parent.Motor6D.Motor6D:Destroy()
	end
end

local function CamShake()
	for i = 1,10 do
		wait(0.025)
		char.Humanoid.CameraOffset = Vector3.new(math.random(-MaxCamShake,MaxCamShake), math.random(-MaxCamShake,MaxCamShake), math.random(-MaxCamShake,MaxCamShake))
	end
	char.Humanoid.CameraOffset = Vector3.new(0,0,0)
end

script.Parent.Equipped:Connect(function()
	CreateMotor6D()
	AnimationStatus = "On"
	nowits6rlly()
	MuzzleOn = false
	script.Parent.MuzzleFlash:FireServer(MuzzleOn)
	Mouse.Icon = "rbxasset://textures/GunCursor.png"
	local function Reload()
		Reloading = true
		Mouse.Icon = "rbxasset://textures/GunWaitCursor.png"
		script.Parent.RELOAD:FireServer()
		local animationReload = script.Parent:WaitForChild('Reload')
		local Reload = humanoid:LoadAnimation(animationReload)
		Reload.Looped = false
		Reload:Play()
		wait(ReloadTime)
		Ammo = MaxAmmo
		Reloading = false
		Mouse.Icon = "rbxasset://textures/GunCursor.png"
	end
	script.Parent.Activated:Connect(function()
		if Ammo>0 and not Reloading and counter==0 or counter==1 then
			Ammo=Ammo-1
			script.Parent.RayCastEvent:FireServer(script.Parent.BulHol.CFrame.Position, Mouse.Hit.Position)
			local animationShoot = script.Parent:WaitForChild('Shoot')
			local Shoot = humanoid:LoadAnimation(animationShoot)
			Shoot:Play()
			MuzzleOn = true
			script.Parent.MuzzleFlash:FireServer(MuzzleOn)
			CamShake()
			MuzzleOn = false
			script.Parent.MuzzleFlash:FireServer(MuzzleOn)
			if Unequipped == true then
				counter = 1
			end
		elseif not Reloading and Ammo==0 and counter==0 then
			print("reload")
			Reload()
		elseif counter==1 then
			counter=0 --My attempt at fixing the bug
		end
	end)
	print(counter .. "yes")--Some print()'s are my way of finding the bug.
	print(Ammo)
end)

script.Parent.Unequipped:Connect(function()
	print("unequipped, ammo is at  " .. Ammo .. "  bullet(s)")--Like this one
	DestroyMotor6D()
	Mouse.Icon = "rbxasset://SystemCursors/Arrow"
	AnimationStatus = "Off"
	nowits6rlly()
	Unequipped = true
end)

2 comments

0

Please accept the answer that works

0

sorry needed to check if it works

1 answer

✓ Accepted answer

Instead of having :Activated in the equipped event, put it as its own event, outside of the equipped event!

3 comments

0

oh thx

0

accept my answerrr

0

kk

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