How do I fix my charging melee attack?

I am working on a battle royale game where players to be able to click to attack and click and hold to charge up attacks. I’m currently using a single animation for the normal and charged variants of the attack. I want the script to check when the player begins a click, play a certain percentage of an animation until they reach a keyframe marker (“SwingStart”) and then stop and wait for the player to release the click to continue the animation out.

The issue is that the code doesn’t recognize the SwingStart and SwingEnd functions. Output keeps on saying ‘Passed value is not a function’ referring to when I connect the events to their appropriate functions.

If anyone has an idea of how I can fix this or how I can find a better way to create a charging animation please lemme know.

local attack_anim_track = nil
local onSwingStart = nil
local onSwingEnd = nil

function SwingStart()
    print("swing started")
    attack_anim_stop_time = attack_anim_track.TimePosition
    attack_anim_track:Stop()
end

function SwingEnd()
    print("swing ended")
end

function anims:attack(humState,inputState)
	if inputState == Enum.UserInputState.Begin then

		attack_anim_track = hum:LoadAnimation(animations.attack["swing1"])

			onSwingStart = attack_anim_track:GetMarkerReachedSignal("SwingStart")
			onSwingEnd = attack_anim_track:GetMarkerReachedSignal("SwingEnd")

			attack_anim_track:Play()
			onSwingStart:Connect(SwingStart)
		end 
		elseif inputState == Enum.UserInputState.End then
		
		attack_anim_track:Play()
		attack_anim_track.TimePosition = attack_anim_stop_time
		
		-- fire 'attack_in' event
		
		onSwingEnd:Connect(SwingEnd)
	
	end
end
1 Like

You have an extra pair of parenthesis. Connect (SwingStart()) will try to connect to the return of the swing start function. You want Connect(SwingStart).

1 Like

Okay that definitely fixes the ‘passed value is not a function’ problem but for some reason the code just ignores the functions entirely.

1 Like