I want to make the guns in my game ignore all accessories and I added this to it
script.DestroyObject.OnServerEvent:Connect(function(plr,hit)
if string.match(hit.Name,"Window") or string.match(hit.Name,"Glass") then
hit:Destroy()
elseif hit.Parent.ClassName == "Accessory" then
hit.Parent.Parent.Humanoid:TakeDamage(100) -- can change in client but im not doing 100000 of them
elseif hit.Parent.Parent.ClassName == "Accessory" then
hit.Parent.Parent.Parent.Humanoid:TakeDamage(100) -- can change in client but im not doing 100000 of them
end
But the only problem is it does 100 damage no matter which gun or where the accessory is which is not what I want I just want it to simply ignore accessories. Here is my WeaponServerScript:
--Version: 4.3.1
print("Loading weapons RFs")
local Ignore_Model = workspace:FindFirstChild("Ignore_Model") or Instance.new("Model",workspace)
Ignore_Model.Name = "Ignore_Model"
ShootRF = script:WaitForChild("Shoot")
FakeArmsRF = script:WaitForChild("FakeArms")
FakeArmsRemoveRF = script:WaitForChild("FakeArmsRemove")
SetNeckRE = script:WaitForChild("SetNeck")
AimRF = script:WaitForChild("Aim")
ReloadingAnimationRF = script:WaitForChild("ReloadingAnimation")
SprintRE = script:WaitForChild("Sprint")
Debris = game:GetService("Debris")
function ItsKill(Player,Killed,Wpn,Headshot,Distance)
print(Player.Name.." killed "..Killed.Name.." with "..Wpn.." from "..math.floor(Distance/0.1)*0.1 .." studs")
end
ShootRF.OnServerEvent:connect(function(Player,StartPos,EndPos,HitPlayer,Damage,Wpn,IsHeadshot,BSP)
if not StartPos or not EndPos then return false end
if Player.Character.Humanoid.Health < 1 then return end
local Distance = (StartPos-EndPos).magnitude
if HitPlayer then
if HitPlayer.Character.Humanoid.Health <= Damage and HitPlayer.Character.Humanoid.Health > 0 then
HitPlayer.Character.Humanoid.Health = 0
ItsKill(Player,HitPlayer,Wpn,IsHeadshot,Distance)
else
HitPlayer.Character.Humanoid.Health = HitPlayer.Character.Humanoid.Health - Damage
end
end
--Sound
if BSP then
local Sound = BSP.Sound
local Sound = Sound:Clone()
Sound.Parent = BSP
if Sound then Sound:Play() end
Debris:AddItem(Sound,Sound.TimeLength)
end
--Creating bullet tracer
local rayPart = Instance.new("Part")
rayPart.Parent = Ignore_Model
rayPart.Name = "RayPart"
rayPart.BrickColor = BrickColor.new("Meduim stone grey")
rayPart.Transparency = 0.85
rayPart.Anchored = true
rayPart.CanCollide = false
rayPart.TopSurface = Enum.SurfaceType.Smooth
rayPart.BottomSurface = Enum.SurfaceType.Smooth
rayPart.Size = Vector3.new(0.2, 0.2, Distance-10)
rayPart.CFrame = CFrame.new(EndPos, StartPos) * CFrame.new(0, 0, -Distance/2)
rayPart.CFrame = rayPart.CFrame * CFrame.new(0,0,10)
Debris:AddItem(rayPart, 0.45)
end)
function FakeArmsRF.OnServerInvoke(Player,LeftPos,RightPos)
local PChar = Player.Character
local Left_Weld,Right_Weld
local Right_Arm, Left_Arm, Torso
local isR15 = false
if PChar then
Torso = PChar:FindFirstChild("Torso")
if not Torso then
Torso = PChar:FindFirstChild("UpperTorso")
if Torso then
isR15 = true
Right_Arm = PChar:FindFirstChild("RightUpperArm")
Left_Arm = PChar:FindFirstChild("LeftUpperArm")
else
error("Character's Torso is not found.")
end
end
Left_Weld = Instance.new("Weld", Torso)
Left_Weld.Name = "Left_Weld"
Left_Weld.Part0 = PChar.Head
if isR15 then
Left_Weld.C0 = CFrame.new(0.1, -1.8, 0)
else
Left_Weld.C0 = CFrame.new(0, -1.5, 0)
end
if isR15 then
Left_Arm["LeftShoulder"].Part1 = nil
Left_Weld.Part1 = Left_Arm
else
Torso["Left Shoulder"].Part1 = nil
Left_Weld.Part1 = PChar["Left Arm"]
end
Right_Weld = Instance.new("Weld", Torso)
Right_Weld.Name = "Right_Weld"
Right_Weld.Part0 = PChar.Head
if isR15 then
Right_Arm["RightShoulder"].Part1 = nil
Right_Weld.Part1 = Right_Arm
else
Torso["Right Shoulder"].Part1 = nil
Right_Weld.Part1 = PChar["Right Arm"]
end
if isR15 then
Right_Weld.C0 = CFrame.new(0.55, -1.8, 0.5)
else
Right_Weld.C0 = CFrame.new(0, -1.5, 0)
end
Left_Weld.C1 = LeftPos
Right_Weld.C1 = RightPos
end
local FixedArm,FixedArmWeld,FixedArmModel
--Fixed Arm
print("Fixing arm(Aiming)")
if isR15 then
FixedArm = Right_Arm:Clone()
else
FixedArm = PChar["Right Arm"]:Clone()
FixedArm.Size = Vector3.new(1,2,1)
end
FixedArmWeld = Instance.new("Weld", FixedArm)
FixedArmWeld.Part0 = PChar.Head
FixedArmWeld.Part1 = FixedArm
FixedArmModel = Instance.new("Model",Ignore_Model)
for i, v in pairs(PChar:GetChildren()) do
if v:IsA("CharacterMesh") and v.BodyPart == Enum.BodyPart.LeftArm or v:IsA("CharacterMesh") and v.BodyPart == Enum.BodyPart.RightArm then
v:Clone().Parent = FixedArmModel
end
end
if PChar:FindFirstChild("Shirt") then
local Humanoid = Instance.new("Humanoid")
Humanoid.Parent = FixedArmModel
if isR15 then
Humanoid.RigType = "R15"
else
Humanoid.RigType = "R6"
end
PChar.Shirt:Clone().Parent = FixedArmModel
end
FixedArm.Transparency = 1
FixedArm.Parent = FixedArmModel
FixedArmWeld.C1 = CFrame.new(-1, 0.5, -1) * CFrame.Angles(math.rad(-85), math.rad(-40), 0)
return Left_Weld,Right_Weld,FixedArm,FixedArmWeld,FixedArmModel
end
function FakeArmsRemoveRF.OnServerInvoke(Player)
local PChar = Player.Character
if not PChar then return error("Character is not found") end
local Torso = PChar:FindFirstChild("Torso")
if not Torso then
Torso = PChar:FindFirstChild("UpperTorso")
if not Torso then return error("Character's Torso is not found") end
local Right_Arm,Left_Arm = PChar:FindFirstChild("RightUpperArm"),PChar:FindFirstChild("LeftUpperArm")
Right_Arm["RightShoulder"].Part1 = Right_Arm
Left_Arm["LeftShoulder"].Part1 = Left_Arm
else
Torso["Right Shoulder"].Part1, Torso["Left Shoulder"].Part1 = PChar["Right Arm"], PChar["Left Arm"]
end
local LW = Torso:FindFirstChild("Left_Weld")
if LW then LW:Destroy() end
local RW = Torso:FindFirstChild("Right_Weld")
if RW then RW:Destroy() end
local FixedArmModel = Ignore_Model:FindFirstChild(Player.Name)
if FixedArmModel then
FixedArmModel:Destroy()
end
end
SetNeckRE.OnServerEvent:connect(function(Player,Angles)
SetNeckRE:FireAllClients(Player,Angles)
end)
AimRF.OnServerEvent:connect(function(Player,InOut,AimPart,LeftAimPos,AimGrip,RightPos,LeftPos)
AimRF:FireAllClients(Player,InOut,AimPart,LeftAimPos,AimGrip,RightPos,LeftPos)
end)
script.HitNotAnchored.OnServerEvent:connect(function(Player,Hit,VelAng)
local v = Instance.new("BodyVelocity",Hit)
v.maxForce = Vector3.new(4000,4000,4000)
v.velocity = VelAng*Vector3.new(15,15,15)
wait(0.01)
v:remove()
end)
script.DestroyObject.OnServerEvent:Connect(function(plr,hit)
if string.match(hit.Name,"Window") or string.match(hit.Name,"Glass") then
hit:Destroy()
elseif hit.Parent.ClassName == "Accessory" then
hit.Parent.Parent.Humanoid:TakeDamage(100) -- can change in client but im not doing 100000 of them
elseif hit.Parent.Parent.ClassName == "Accessory" then
hit.Parent.Parent.Parent.Humanoid:TakeDamage(100) -- can change in client but im not doing 100000 of them
end
end)
ReloadingAnimationRF.OnServerEvent:connect(function(Player,Gun,RightPos)
ReloadingAnimationRF:FireAllClients(Player,Gun,RightPos)
end)
SprintRE.OnServerEvent:connect(function(Player,InOut,Speed,Type,RightPos,LeftPos)
if Player and Player.Character then
Player.Character.Humanoid.WalkSpeed = Speed
SprintRE:FireAllClients(Player,InOut,Speed,Type,RightPos,LeftPos)
end
end)
print("Weapon server-side script loaded")

2 comments
I'm pretty sure all you have to do is do instance.ClassName. If it returns a accessory or something, make the bullet ignore it.
What would I put to have the bullet ignore it is the problem