Tool is invisible

So, here’s my issue. When equipping this specific tool, it doesn’t work and it goes invisible.

Photo

So I tried searching the issue on Google and on the Dev forums, however I’m still pretty clueless on what the issue might be. In the thread “Tool in Replicated Storage going invisible”, the issue was the Massless property was enabled, but it’s disabled on my end. The only other thread I could see from my scrolling was the thread “Tool invisible when equipped?”, however, I’m unsure how they fixed their issue.

It’s under ReplicatedStorage, and here’s what I got.

Photo

Here’s the scripts. It’s a very old game and none of the assets are being reused in the new version, which is why I don’t mind posting the scripts here. I do want it to still work, though.

Server script
--[Removed] & [Removed]

local Tool = script.Parent
local Origin = Tool:WaitForChild('Origin') --This is important, the origin should always be a child of Tool, not just a descendant
local FireEvent = Tool.Client:WaitForChild('Fire')
local GEM = require(game.ReplicatedStorage.GEM)

local ROF = .15 -- Rate of fire
local Speed = 600 -- Bullet speed
local Size = 0.5
local ShootSound = Origin:WaitForChild('Sound')
local TriggerState = 'Released'
local LastShot

for _, Items in pairs(script.Parent.PB2:GetChildren()) do
	GEM.Welding(script.Parent.Handle, Items)
end
GEM.Welding(script.Parent.Handle, Origin)
script.Parent.Handle.Anchored = false

function Shoot(Player)
	local Bullet
	local Smoke
	if not game:GetService('ServerStorage'):FindFirstChild('Bullet') then
		Bullet = Instance.new('Part', game:GetService('ServerStorage'))
		Bullet.Size = Vector3.new(Size, Size, Size)
		Bullet.Shape = Enum.PartType.Ball
		Bullet.CustomPhysicalProperties = PhysicalProperties.new(.2, .1, .1)
		Bullet.BrickColor = BrickColor.Random()
		Bullet.Material = Enum.Material.Neon
		
	else
		Bullet = game:GetService('ServerStorage').Bullet:Clone()
	end
	
	if not game:GetService('ServerStorage'):FindFirstChild('Smoke') then
		Smoke = Instance.new('Part', game:GetService('ServerStorage'))
		Smoke.Size = Vector3.new(.4, .4, .4)
		Smoke.BrickColor = BrickColor.Gray()
		Smoke.Transparency = .7
		Smoke.CanCollide = false
		Smoke.Anchored = true
	else
		Smoke = game:GetService('ServerStorage').Smoke:Clone()
	end
	
	Smoke.Rotation = Origin.Rotation * Vector3.new(math.random(1, 360), math.random(1, 360), math.random(1, 360))
	Smoke.Position = Origin.Position + Origin.CFrame.lookVector * 1
	Smoke.Parent = workspace
	game.Debris:AddItem(Smoke, .05)
	
	Bullet.Position = Origin.Position
	Bullet.Velocity = Origin.CFrame.lookVector * Vector3.new(Speed, Speed, Speed)
	Bullet.Parent = workspace
	
	local CloneSound = ShootSound:Clone()
	CloneSound.Parent = ShootSound.Parent
	CloneSound:Destroy()
	
	--local Smoke = Instance.new('Part')
	
	Bullet.Touched:Connect(function(Hit)
		for _, Player in pairs(game.Players:GetPlayers()) do
			if Hit:IsDescendantOf(Player.Character) and not Hit:IsDescendantOf(script.Parent) then
				if Player.Character:FindFirstChild("PaintballGun") or Player.Backpack:FindFirstChild("PaintballGun") then
					game.ReplicatedStorage.GameController:FireClient(Player, {"Arena", "Dead"})
					--Player.Character.Humanoid:TakeDamage(100)
				end
			end
		end
		if Hit ~= Origin and Hit ~= script.Parent.Handle and not Hit:IsDescendantOf(script.Parent.PB2) then
			Bullet:Destroy()
		end
	end)
end

function Trigger(...)
	local Tuple = {...}
	local Player = Tuple[1]
	local Action = Tuple[2]
	
	if Action == 'TriggerRelease' then --Stop firing
		TriggerState = 'Released'
	elseif Action == 'TriggerPull' then --Start firing
		TriggerState = 'Pulled'
		while TriggerState == 'Pulled' do
			wait()
			if LastShot then
				if tick() - LastShot > ROF then
					if TriggerState == 'Pulled' then
						Shoot(Player)
						LastShot = tick()
					end
				end
			else
				if TriggerState == 'Pulled' then
					Shoot(Player)
					LastShot = tick()
				end
			end
		end
	end
end

FireEvent.OnServerEvent:Connect(Trigger)
Bullet script (This was all that was in it)

-- Bullet | Coded by [Removed] on 12 / 22 / 17 for Baked Cafe V1

Client script
--[Removed]

local FireEvent = script:WaitForChild('Fire')
local Tool = script.Parent

function Equipped(Mouse)
	Mouse.Button1Down:Connect(function() --Left mouse button is down
		FireEvent:FireServer('TriggerPull')
	end)
	Mouse.Button1Up:Connect(function() --Left mouse button is up
		FireEvent:FireServer('TriggerRelease')
	end)
end

Tool.Equipped:Connect(Equipped)
3 Likes

So, basically, tool is invisible? Can we see some of the tool properties, also, is everything welded, anchored or scripted? Make sure the tool parts are transparency = 0, but, are you welding gun?

1 Like

I never ended up fixing my issue, I just had to create a entirely new tool and hoped that it worked, thankfully it did. No idea what the issue was however.

1 Like

Pardon in advance, I’m pretty ignorant with studio. I’m not sure what I should be showing you or what information you need to know. This model was created around 2017, so I don’t know if that’s important to know or not.

Yes, the tool just comes up as invisible when equipped. Also yes, everything is anchored. Everything in the PB2 model (meshparts) is 0 on transparency, but other things like the handle and origin sound brick are on 1.

Paintball gun (Tool)

Oh, I see! Thanks so much for letting me know that. That’s actually very helpful to know the outcome.

If it is a mesh, perhaps the original uploader archived it; deleting it from the site and rendering it invisible.

2 Likes

Unless the asset was deleted by ROBLOX, it shouldn’t matter as you can’t truly delete any assets but only remove them from your Profile (unless this has changed, I keep up with stuff here and there and may miss a thing or two)

@aelzc
As for the Tool, you said it’s completey underneath ReplicatedStorage, including the ServerScript (ClassName Script) and ClientScript (ClassName LocalScript), correct?

1 Like

It’s all checked off as “Archiveable” if that’s what you mean. When disabling that, it either makes the tool not show up at all or teleport me and makes me upside down.

Photo

Yes, everything in tool is underneath ReplicatedStorage.

Archivable doesn’t apply here unless you’re dealing with the Instance.Clone method, which as far as I can tell you aren’t.

1 Like

If the original uploader decided to take an asset down, they can archive it to prevent others from using it.

2 Likes

Thus, something I forgot about.

@aelzc
Anywho, I don’t think it’s a matter of the asset but more of how you have your tool setup. You have a ServerScript (ClassName Script) underneath the Tool which is in ReplicatedStorage. This is not best practice, and could have some potential issues as ServerScripts cannot run everywhere (and I think some fairly recent AntiExploit measures limited this scope even further with how closed source third party modules were injecting backdoors). Please look into moving the ServerScript into ServerScriptService, adjusting how the Tool interacts with it ClientSide and see if this helps

1 Like

Oh, I see. As far as I can tell, Instance.Clone isn’t something that is being used.

Oh, I see. Is there a way to verify if an asset/mesh has been archived or can you only assume/guess by it being invisible?

Just did this. The gun shows up now, but I teleported and forced upside down again.

Photo

Although is this traversing areas I don’t deal with as much, I’m betting it’s something to do with welding. Do you use any sorts of welds in this on the Client?

1 Like

From what I know, no welds were used, but I’m actually unsure how to verify that.

Looking through OP, I realized you posted the Scripts. Afaict, you’re not doing welding, but you also haven’t shown what’s in the PB model. Mind taking a screenshot of it’s descendants?

EDIT: nevermind, confirmed you are doing welding on the ServerSide, which is most certainly your problem
image

1 Like

No worries. Here you go. It’s all meshparts.

Photo

EDIT: How would I fix the welding issue on the ServerSide?

Sadly, this is the extent of my knowledge. I really don’t deal with the 3D aspect of scripting much, but I can confirm to you this is your problem. If someone else who is more knowledgeable on welding can chime in, they most certainly could resolve this.

EDIT for below:
Not a problem

1 Like

Thanks so much for getting as far as you have. I’ll see if I can figure it out as I wait for someone else to chip in.

1 Like
  1. Tools require a part named Handle so the character knows where to hold.
  2. Tools should not be anchored, the parts should be connected through welding.
2 Likes