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

Why does this script not working?

I was making a gun and it worked in solo mode but not in the server mode. I tried to make it work but it doesn't work.

Bin = script.Parent
player = game.Players.LocalPlayer
camera = game.Workspace.CurrentCamera
mouse = player:GetMouse()
BulletSpeed = script.Parent.Configuration.BulletSpeed.Value

function Light()
	script.Parent.Light.Transparency = 0.5
	script.Parent.Light.SpotLight.Enabled =  true
	script.Parent.Shoot:Play()
	wait()
	script.Parent.Light.Transparency = 1
	script.Parent.Light.SpotLight.Enabled =  false
end

function FOVIn()
	camera.FieldOfView = camera.FieldOfView - 5
end

function FOVOut()
	camera.FieldOfView = camera.FieldOfView + 5
end

function weld()
	local parts,last = {}
	local function scan(parent)
		for _,v in pairs(parent:GetChildren()) do
			if (v:IsA("BasePart")) then
				if (last) then
					local w = Instance.new("Weld")
					w.Name = ("%s_Weld"):format(v.Name)
					w.Part0,w.Part1 = last,v
					w.C0 = last.CFrame:inverse()
					w.C1 = v.CFrame:inverse()
					w.Parent = last
				end
				last = v
				table.insert(parts,v)
			end
			scan(v)
		end
	end
	scan(script.Parent)
	for _,v in pairs(parts) do
		v.Anchored = false
	end
end

function Shoot()
	local Ammo = player.PlayerGui.FPS.Ammo
	local H = player.PlayerGui.Status.StatusFrame.Health.Text
	local Cooldown = false
	if Cooldown == false then
		if tonumber(Ammo.Text.Text) == 0 then
			script.Parent.Reloading.Value = true
			Reload = player.Character.Humanoid:LoadAnimation(script.Parent.GunReload)
			Reload:Play()
			Ammo.Text.Text = "Reloading"
			Ammo.Bar:TweenSize(UDim2.new(0,300,1,0),"InOut","Quad",4)
			script.Parent.ChangeReload.Disabled = false
		elseif script.Parent.Reloading.Value == false then
			local Bullet = Instance.new("Part",game.Workspace)
			Bullet.FormFactor = "Custom"
			Bullet.Size = Vector3.new(0.1,0.1,0.1)
			Bullet.Position = script.Parent.Hole.Position
			Bullet.CFrame = CFrame.new(Bullet.Position,mouse.Hit.p)
			Bullet.BrickColor = BrickColor.new("Really black")
			Bullet.CanCollide = false
			local Rocket = Instance.new("BodyVelocity",Bullet)
			Rocket.maxForce = Vector3.new(math.huge,math.huge,math.huge)
			Rocket.velocity = Bullet.CFrame.lookVector * BulletSpeed
			findScript = Bullet:FindFirstChild("TakeDamage")
			if TakeDamage == nil then
				local Script = script.TakeDamage:Clone()
				Script.Parent = Bullet
				Script = script.TakeDamage:Clone()
				Script.Parent = Bullet
				Val = script.Parent.Configuration.Damage:Clone()
				Val.Parent = Script
				Script.Creator.Value = player.Name
				Script.Disabled = false
			end
			Ammo.Text.Text = Ammo.Text.Text - 1
			Ammo.Bar.Size = UDim2.new(0,tonumber(Ammo.Text.Text) * 10 * 3,1,0)
			Light()
			script.Parent.Shoot:Play()
			Cooldown = true
			wait(0.2)
			Cooldown = false
		end
	end
end

function UnEquipped()
	player.CameraMode = "Classic"
	script.Disabled = true
end

weld()

Bin.Activated:connect(Shoot)
Bin.Unequipped:connect(UnEquipped)
mouse.WheelForward:connect(FOVIn)
mouse.WheelBackward:connect(FOVOut)

1 answer

✓ Accepted answer

Add repeat wait() until game.Players.LocalPlayer at the top and replace BulletSpeed line with

BulletSpeed = 
script.Parent:WaitForChild'Configuration':WaitForChild'BulletSpeed'.Value

LocalScripts runs too early that it causes these problems.

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