Sword Script Issues

  1. I’m making a sword with a pan mesh, and different stuff. I have it so the sound plays when it hits someone.

  2. There’s two main issues. 1, the sound only plays for the person who is hitting someone. 2, both people when attacking can die by the other’s person’s pan
    eeerrrrrrr
    (Both players dying)

  3. I have tried changing the damage, making it a local script, but none of that seems to work.

Here is the script:

r = game:service("RunService")


local damage = 5


local slash_damage = 15


sword = script.Parent.Handle
Tool = script.Parent


--[[local SlashSound = Instance.new("Sound")
SlashSound.SoundId = "rbxassetid://148862502"
SlashSound.Parent = sword
SlashSound.Volume = .5]]


local UnsheathSound = Instance.new("Sound")
UnsheathSound.SoundId = "rbxasset://sounds\\unsheath.wav"
UnsheathSound.Parent = sword
UnsheathSound.Volume = 0


function blow(hit)
	local humanoid = hit.Parent:findFirstChild("Humanoid")
	local vCharacter = Tool.Parent
	local vPlayer = game.Players:playerFromCharacter(vCharacter)
	local hum = vCharacter:findFirstChild("Humanoid") -- non-nil if tool held by a character
	if humanoid~=nil and humanoid ~= hum and hum ~= nil then
		-- final check, make sure sword is in-hand

		local right_arm = vCharacter:FindFirstChild("Right Arm")
		if (right_arm ~= nil) then
			local joint = right_arm:FindFirstChild("RightGrip")
			if (joint ~= nil and (joint.Part0 == sword or joint.Part1 == sword)) then
				tagHumanoid(humanoid, vPlayer)
				humanoid:TakeDamage(damage)
				wait(1)
				untagHumanoid(humanoid)
			end
		end


	end
end


function tagHumanoid(humanoid, player)
	local creator_tag = Instance.new("ObjectValue")
	creator_tag.Value = player
	creator_tag.Name = "creator"
	creator_tag.Parent = humanoid
end

function untagHumanoid(humanoid)
	if humanoid ~= nil then
		local tag = humanoid:findFirstChild("creator")
		if tag ~= nil then
			tag.Parent = nil
		end
	end
end


function attack()
	damage = slash_damage
	--Slash148862502:play()
	end


function swordUp()
	Tool.GripForward = Vector3.new(-1,0,0)
	Tool.GripRight = Vector3.new(0,1,0)
	Tool.GripUp = Vector3.new(0,0,1)
end

function swordOut()
	Tool.GripForward = Vector3.new(0,0,1)
	Tool.GripRight = Vector3.new(0,-1,0)
	Tool.GripUp = Vector3.new(-1,0,0)
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

	

	attack()

	wait(.5)

	Tool.Enabled = true
end


function onEquipped()
	UnsheathSound:play()
end


script.Parent.Activated:connect(onActivated)
script.Parent.Equipped:connect(onEquipped)


connection = sword.Touched:connect(blow)

If you play a sound from LocalScript, only you can hear it if SoundService.RespectFilteringEnabled is true. Make sure it is false.

Hi, how do I access it?
Is it in properties?

Yes

When I click the sound? I don’t see it.

I found it. Thanksssssssssssss

Thanks, now all I need to do is fix where sometimes both players die if they hit eachother at the same time.

I don’t suggest doing this if you plan on releasing this in a game because this would allow exploiters to play any sound they want for every other player. There are more secure methods of fixing this but you need to understand remote events and how filtering enabled works.

1 Like

This is the worst idea ever. Why are you allowing exploits crash the game only with some sounds with hight pitch and hight volume?

1 Like

You can also add a normal script and a remote event into the tool and play the sound from the regular script if that concerns you.

If you don’t want it to damage your own player, then just add a check to the sword.

It doesn’t damage it’s own player. The problem is, when people attack eachother, they can die at the same time by the other’s tool.

Add a check for humanoid health.