I recently wanted to add some swords to my game and i have come across this issue:

https://gyazo.com/e52392c16e4aed4f8f2dd5f863ac945d

Do i have to just change the rotation of the tool?

Here's my current sword script:



r = game:service("RunService")


local damage = 7


local slash_damage = 12
local lunge_damage = 31

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


local SlashSound = Instance.new("Sound")
SlashSound.SoundId = "rbxasset://sounds\\swordslash.wav"
SlashSound.Parent = sword
SlashSound.Volume = .7

local LungeSound = Instance.new("Sound")
LungeSound.SoundId = "rbxasset://sounds\\swordlunge.wav"
LungeSound.Parent = sword
LungeSound.Volume = .6

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


function blow(hit)
	if (hit.Parent == nil) then return end 

	local humanoid = hit.Parent:findFirstChild("Humanoid")
	local vCharacter = Tool.Parent
	local vPlayer = game.Players:playerFromCharacter(vCharacter)
	local hum = vCharacter:findFirstChild("Humanoid") 
	if humanoid and humanoid ~= hum and hum then
		-- final check, make sure sword is in-hand
		local guygettingsliced = game.Players:GetPlayerFromCharacter(hit.Parent) --OH LOOK, here's an edit 
		local right_arm = vCharacter:FindFirstChild("Right Arm")
		if (right_arm) then
			local joint = right_arm:FindFirstChild("RightGrip")
			if (joint and (joint.Part0 == sword or joint.Part1 == sword)) then
				if guygettingsliced then --If he's a player 
					--if vPlayer.TeamColor ~= guygettingsliced.TeamColor then  
						tagHumanoid(humanoid, vPlayer)
						humanoid:TakeDamage(damage)
						wait(1)
						untagHumanoid(humanoid)
					--end  
				else --If he's not a player (AI, shop, etc) 
					tagHumanoid(humanoid, vPlayer)
					humanoid:TakeDamage(damage)
					wait(1)
					untagHumanoid(humanoid)
				end 
			end
			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)
				if game.Players:FindFirstChild(hit.Parent.Name) then
					local Victim = game.Players:GetPlayerFromCharacter(hit.Parent)
					if Victim:FindFirstChild('Duelling') then
				    else
					if not vCharacter:FindFirstChild('RK') then
					local TaggedasRk = Instance.new('StringValue', vCharacter)
					TaggedasRk.Name = "RK"
					TaggedasRk.Value = vPlayer.Name
					end
					end
				end
				if hit.Parent.Name == "Sword bot" then
					if not vCharacter:FindFirstChild('RK') then
					local TaggedasRk = Instance.new('StringValue', vCharacter)
					TaggedasRk.Name = "RK"
					TaggedasRk.Value = vPlayer.Name
					end
				end
				humanoid:TakeDamage(damage)
				wait(1)
				untagHumanoid(humanoid)
			end end
		end

--Added those two (if player/if not player) in so this wouldn't break if you used it on AI, or something of the sort. 


	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
	SlashSound:play()
	local anim = Instance.new("StringValue")
	anim.Name = "toolanim"
	anim.Value = "Slash"
	anim.Parent = Tool
end

function lunge()
	damage = lunge_damage

	LungeSound:play()

	local anim = Instance.new("StringValue")
	anim.Name = "toolanim"
	anim.Value = "Lunge"
	anim.Parent = Tool
	
	
	local force = Instance.new("BodyVelocity")
	force.velocity = Vector3.new(0,10,0) 
	force.maxForce = Vector3.new(0,4000,0) -- ADD THIS TO CHANGE MOMENTUM
	force.Parent = Tool.Parent.Torso
	wait(.25)
	swordOut()
	wait(.25)
	force.Parent = nil
	wait(.5)
	swordUp()

	damage = slash_damage
end

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

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

function swordAcross()
	-- parry
end


Tool.Enabled = true
local last_attack = 0
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

	local t = r.Stepped:wait()

	if (t - last_attack < .2) then
		lunge()
	else
		attack()
	end

	last_attack = t

	--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)



5 comments

0

Thanks, will try this out.

0

Nope, this breaks after i hit. The grip is already right.

0

Nvm figured it out myself, all i had to do was change the grip values in the script