how to get an animation instance by an animation track using Humanoid…GetPlayingAnimationTracks()?
script.Parent.Activated:Connect(function()
WeaponModule.WeaponAttack(script.Parent,"GreatSword") --this is function of a moduleScript that receive these 2 parameters: the tool and the tool Category
--the module plays an animation and thats what i need to get
for i,v in pairs(Character.Humanoid:GetPlayingAnimationTracks()) do
if v.Name == "Slash1" or v.Name == "Slash2" or v.Name == "Slash3" or v.Name == "Slash4" then --this is just a test i know is bad
Animation = v
end
end
Character.Humanoid.Animator:LoadAnimation(Animation):GetMarkerReachedSignal("attackStart"):Connect(function() -- where i get the error
WeaponModule.StartAttack(script.Parent,"GreatSword")
end)
end)
tried this with the error LoadAnimation requires an Animation object
local Humanoid = Character.Hmanoid --// I'd just define all that outside easier reading/debuggng
script.Parent.Activated:Connect(function()
WeaponModule.WeaponAttack(script.Parent,"GreatSword") --// Your Module script line
local function CheckSlashes(v) --// your conditions just for readability rn
return v.Name == "Slash1" or v.Name == "Slash2" or v.Name == "Slash3" or v.Name == "Slash4"
end
for i,v in pairs(Humanoid:GetPlayingAnimationTracks()) do
--// If i knew what your index and values were i'd name it em
print(i,v) --// We gottha see what were workin with
if CheckSlashes(v) then --// Your conditinal before wasnt bad I'm just extra (._.'
print("Setting Animation to "..v)
Animation = v --// Is Animation Defined outside of this Event?
break --// Stops loop
end
end
if not Animation then
warn("We got no Animation")
return --// Stops script / We got no Animation
else
warn("We got the Animation",Animation)
end
local AnimationTrack = Humanoid.Animator:LoadAnimation(Animation)
AnimationTrack:GetMarkerReachedSignal("attackStart"):Connect(function() --//Error occurs u said
--// I wanna kno more about your animation marker
WeaponModule.StartAttack(script.Parent,"GreatSword") ---// Starts Hit detection I assume (._.'
end)
end)
Here is what I whipped together with some questions I’ll be developing for the next few hours, but I’ll try to pop in and help if you respond.
Edit: Also just noticed that you dont have a line that says AnimationTrack:Play() so idk how :GetMarkerReachedSignal() Would error I’m curious if you did and where
In the case, I don’t get back to ya… Check your AnimationMarker name and make sure its on the Animation you are trying to play. I have a well-maintained script that usesanimation and markers for weapons and character agility and modules, so I’m well-versed with this so am happy to help
yeah i wanted to talk about it but it prints the (correct) animation name, but not the parent. anyway i “fixed” it by getting the playing animation by the module script, i wont make this as a solution yet
the thing is, the script doesnt make any error but still it doesnt work ( mine, i checked yours and tried to fix mine), so i think the problem is the module script, i will try to rewrite it entirely cause i made a mess
Why did you delete it? It could have been salvageable, but if that’s what you wanted, it’s fine.
Edit: You should brainstorm what you want it to do. then just list the function names. or tables and variables you will need. eventually thinking about what you really need and how to make things more efficient.
I was going to tell you how I’ve done my weapon modules but my systems are quite complex I even get confused sometimes with the way I loop server-client interaction within these modules
--as i said, the script is heavily modified
function WeaponModule.StartAttack(Tool, weaponType)
local hitDebounce = {}
local Character = Tool.Parent
WeaponModule.slashPlaying = Character.Humanoid.Animator:LoadAnimation(anims:FindFirstChild(weaponType):FindFirstChild("Slash"..WeaponModule.combo))
local slashSpeed = Tool:GetAttribute("SlashSpeed")
local damage = Tool:GetAttribute("Damage")
local hitbox = Tool:WaitForChild("Hitbox")
print("Start")
hitbox.CanTouch = true
hitbox.Transparency = 1
sounds.SwordSlash:Play()
hitbox.Touched:Connect(function(hit)
if not canHit and hit.Parent:FindFirstChild("zHumanoid") and hit.Parent.zHumanoid.Health ~= 0 and not table.find(hitDebounce,hit.Parent.zHumanoid) then
table.insert(hitDebounce, hit.Parent.zHumanoid)
if hit.Parent.zHumanoid then
hit.Parent.zHumanoid:TakeDamage(damage)
else
hit.Parent.zHumanoid:TakeDamage(damage) --just to make sure
end
----------------------------
sounds.SwordLunge:Play()
local knockback = Instance.new("BodyVelocity")
knockback.Parent = hit.Parent.HumanoidRootPart
local hitParticle = replicatedStorage.Folder.Particles.HitParticle:Clone()
hitParticle.Parent = hit
hitParticle.Enabled = true
task.delay(.3, function()
hitParticle.Enabled = false
task.wait()
hitParticle = nil
end)
knockback.MaxForce = Vector3.new(80000,80000,80000)
knockback.Velocity = Character.HumanoidRootPart.CFrame.lookVector * 10
task.delay(.5, function()
knockback.Velocity = Vector3.zero
--knockback = nil
end)
---------------------------
task.delay(.3, function()
table.remove(hitDebounce,1)
print("Works?") --no
end)
end
end)
end
for now the problem isnt this, as the output says Backpack.GreatSword.Script:19: attempt to index nil with ‘GetMarkerReachedSignal’, so the problem is from the script and not the Module ( for now )
The line from the script. That’s erroring. Can I see it?
Edit: reading you script I see in your conditional for the Hitbox.Touched you have canHit, which is never defined. Theres a lot of clutter but your smart and headed in a good direction keep up the good work
local WeaponModule = require(workspace.Modules.WeaponModule)
local Tool = script.Parent
local Character
local slashSpeed = Tool:GetAttribute("SlashSpeed")
local damage = Tool:GetAttribute("Damage")
local Type = Tool:GetAttribute("weaponType")
local hitbox = Tool:WaitForChild("Hitbox")
script.Parent.Equipped:Connect(function()
Character = Tool.Parent
script.Parent.Activated:Connect(function()
WeaponModule.WeaponAttack(script.Parent,"GreatSword") --this works
print("Check") -- checks
WeaponModule.slashPlaying:GetMarkerReachedSignal("attackStart"):Connect(function() --this line breaks everything
print("almost")
WeaponModule.StartAttack(script.Parent,Type)
print("done")
end)
end)
end)