Disbale a feature of a script

I have been failing for days to create a sword that works the way I need it too and also not do any team damage to players. I have resorted to searching around for a tool that has the features I need and I came really close. This script is the classic sword that was re written and it functions fairly well. The only problem is the lunge attack is broken. After lunging the script stops working until the sword if unequiped and reequiped.

But that’s alright. I dont need the lunge and dont even like the lunge. I have been trying to disable the lunge and still have the sword function. I have not been successful. If i disable what I think should be disabled it breaks the sword.

Can someone show me how to disable the lunge and still have the sword function? If so I can modify the rest by putting a new appearance on the handle and changing the animations.

--[[
	Rewritten by ArceusInator
	
	This script is the Sword module.  This runs on either the server (when FilteringEnabled is on) or the client (when FilteringEnabled is off)
--]]
local Tool = script.Parent
local Handle = Tool.Handle
local Config = Tool:WaitForChild'Configurations'
local Sword = {
	-- Advanced settings
	DoubleClickMaxTime = 0.2,
	LocalDoubleClickMaxTime = 0.2,
	
	-- Variables
	State = 'Idle', -- Idle, Slashing, Lunging
	LocalState = 'Idle',
	SlashingStartedAt = 0,
	LocalSlashingStartedAt = 0,
	AttackTicket = 0,
	LocalAttackTicket = 0,
	DestroyOnUnequip = {}
}

local GLib = require(Tool:WaitForChild'GLib') -- Library of useful functions

--
--
function Sword:Connect()
	Handle.Touched:connect(function(hit)
		local myPlayer = GLib.GetPlayerFromPart(Tool)
		local character, player, humanoid = GLib.GetCharacterFromPart(hit)
		
		if myPlayer~=nil and character~=nil and humanoid~=nil and myPlayer~=player then
			local isTeammate = GLib.IsTeammate(myPlayer, player)
			local myCharacter = myPlayer.Character
			local myHumanoid = myCharacter and myCharacter:FindFirstChild'Humanoid'
			
			if (Config.CanTeamkill.Value==true or isTeammate~=true) and (myHumanoid and myHumanoid:IsA'Humanoid' and myHumanoid.Health > 0) and (Config.CanKillWithForceField.Value or myCharacter:FindFirstChild'ForceField'==nil) then
				local doDamage = Config.IdleDamage.Value
				if Sword.State == 'Slashing' then
					doDamage = Config.SlashDamage.Value
				elseif Sword.State == 'Lunging' then
					doDamage = Config.LungeDamage.Value
				end
				
				GLib.TagHumanoid(humanoid, myPlayer, 1)
				humanoid:TakeDamage(doDamage)
			end
		end
	end)
end

function Sword:Attack()
	local myCharacter, myPlayer, myHumanoid = GLib.GetCharacterFromPart(Tool)
	
	if myHumanoid~=nil and myHumanoid.Health > 0 then
		if Config.CanKillWithForceField.Value or myCharacter:FindFirstChild'ForceField'==nil then
			local now = tick()
			
			if Sword.State == 'Slashing' and now-Sword.SlashingStartedAt < Sword.DoubleClickMaxTime then
				Sword.AttackTicket = Sword.AttackTicket+1
				
				Sword:Lunge(Sword.AttackTicket)
			elseif Sword.State == 'Idle' then
				Sword.AttackTicket = Sword.AttackTicket+1
				Sword.SlashingStartedAt = now
				
				Sword:Slash(Sword.AttackTicket)
			end
		end
	end
end

function Sword:LocalAttack()
	local myCharacter, myPlayer, myHumanoid = GLib.GetCharacterFromPart(Tool)
	
	if myHumanoid~=nil and myHumanoid.Health > 0 then
		if Config.CanKillWithForceField.Value or myCharacter:FindFirstChild'ForceField'==nil then
			local now = tick()
			
			if Sword.LocalState == 'Slashing' and now-Sword.LocalSlashingStartedAt < Sword.LocalDoubleClickMaxTime then
				Sword.LocalAttackTicket = Sword.LocalAttackTicket+1
				
				Sword:LocalLunge(Sword.LocalAttackTicket)
			elseif Sword.LocalState == 'Idle' then
				Sword.LocalAttackTicket = Sword.LocalAttackTicket+1
				Sword.LocalSlashingStartedAt = now
				
				Sword:LocalSlash(Sword.LocalAttackTicket)
			end
		end
	end
end

function Sword:Slash(ticket)
	Sword.State = 'Slashing'
	
	Handle.SlashSound:Play()
	Sword:Animate'Slash'
	
	wait(0.5)
	
	if Sword.AttackTicket == ticket then
		Sword.State = 'Idle'
	end
end

function Sword:LocalSlash(ticket)
	Sword.LocalState = 'Slashing'
	
	wait(0.5)
	
	if Sword.LocalAttackTicket == ticket then
		Sword.LocalState = 'Idle'
	end
end

function Sword:Lunge(ticket)
	Sword.State = 'Lunging'
	
	Handle.LungeSound:Play()
	Sword:Animate'Lunge'
	
	local force = Instance.new'BodyVelocity'
	force.velocity = Vector3.new(0, 10, 0)
	force.maxForce = Vector3.new(0, 4000, 0)
	force.Parent = Tool.Parent.Torso
	Sword.DestroyOnUnequip[force] = true
	
	wait(0.25)
	Tool.Grip = CFrame.new(0, 0, -1.5, 0, -1, -0, -1, 0, -0, 0, 0, -1)
	wait(0.25)
	force:Destroy()
	Sword.DestroyOnUnequip[force] = nil
	wait(0.5)
	Tool.Grip = CFrame.new(0, 0, -1.5, 0, 0, 1, 1, 0, 0, 0, 1, 0)
	
	Sword.State = 'Idle'
end

function Sword:LocalLunge(ticket)
	Sword.LocalState = 'Lunging'
	
	wait(0.25)
	wait(0.25)
	wait(0.5)
	
	Sword.LocalState = 'Idle'
end

function Sword:Animate(name)
	local tag = Instance.new'StringValue'
	tag.Name = 'toolanim'
	tag.Value = name
	tag.Parent = Tool -- Tag gets removed by the animation script
end

function Sword:Unequip()
	for obj in next, Sword.DestroyOnUnequip do
		obj:Destroy()
	end
	
	Sword.DestroyOnUnequip = {}
	
	Tool.Grip = CFrame.new(0, 0, -1.5, 0, 0, 1, 1, 0, 0, 0, 1, 0)
	Sword.State = 'Idle'
	Sword.LocalState = 'Idle'
end

--
function Sword:Initialize()
	Sword:Connect()
end

--
--
return Sword

This is the classic sword FE in the toolbox of the game studio if anyone was wondering.

you can comment out the lunge function then comment out or remove everything that calls it. that function gets called in the attack and localattack functions. removing those should only let the normal attack happen (removing the state if statements so it always calls the normal attack)

I have been trying to do that and when I comment the lines out the regular attack stops working.

try changing these functions to this

function Sword:Attack()
	local myCharacter, myPlayer, myHumanoid = GLib.GetCharacterFromPart(Tool)
	
	if myHumanoid~=nil and myHumanoid.Health > 0 then
		if Config.CanKillWithForceField.Value or myCharacter:FindFirstChild'ForceField'==nil then
			local now = tick()
			
			Sword.AttackTicket = Sword.AttackTicket+1
			Sword.SlashingStartedAt = now
				
			Sword:Slash(Sword.AttackTicket)
		end
	end
end
function Sword:LocalAttack()
	local myCharacter, myPlayer, myHumanoid = GLib.GetCharacterFromPart(Tool)
	
	if myHumanoid~=nil and myHumanoid.Health > 0 then
		if Config.CanKillWithForceField.Value or myCharacter:FindFirstChild'ForceField'==nil then
			local now = tick()
			
			Sword.LocalAttackTicket = Sword.LocalAttackTicket+1
			Sword.LocalSlashingStartedAt = now
				
			Sword:LocalSlash(Sword.LocalAttackTicket)
		end
	end
end

I might have found an easier way. Lunge is controlled with double clicking the key. I just changed the double click to zero so It cant happen. Still playing around with it.

It also looks like it calls for the default attack animation to play when it is swinging. I need the change it to a custom animation. There are more weapons in the game so changing the default animation would ruin the other weapons swing animations.

Trying to change the animations Anyone know why it breaks if I add a animation line?

function Sword:Slash(ticket)
	local Animation = script.Swing
	Sword.State = 'Slashing'
	
	Handle.SlashSound:Play()
	Animation:Play()
	--Sword:Animate'Slash'
	
	wait(1)