script.Parent.AttributeChanged:Connect(function(attribute)
local list = {}
for i,v in pairs(script.Parent.Parent:GetChildren()) do
if v:IsA("Model") then
table.insert(list,#list + 1,v)
end
end
local stage = script.Parent:GetAttribute("Stage")
if stage == 'Attacker' or stage == 'Attacker' then
local is_attacking = stage == 'Attacker' or stage == 'Attacker'
local targ = script.Parent.Target.Value
local hrp = script.Parent.HumanoidRootPart
while script.Parent.Target.Value ~= nil and is_attacking do
wait()
if stage == 'Attacker' or stage == 'Attacker' then
local cooldownwait = math.random(atcdmin,atccmax)
if (hrp.Position - targ.Position).magnitude >= 4 then
local dest = (script.Parent.Target.Value.Position - (script.Parent.Head.CFrame.LookVector * 4))
local path = pathfind:CreatePath()
path:ComputeAsync(script.Parent.HumanoidRootPart.Position,dest)
if stage == 'Attacker' or stage == 'QuickAttacker' then
hum:MoveTo(dest)
end
end
if (hrp.Position - targ.Position).magnitude <= 7 then
hum:Move(Vector3.new(0,0,0))
if cooldown == false then
hum:Move(Vector3.new(0,0,0))
if script.Parent:GetAttribute('Stage') == 'Attacker' then
mod.Attack(char,anims,13,.75,char.Tool.Blade,.65,false)
elseif script.Parent:GetAttribute('Stage') == 'QuickAttacker' then
mod.Attack(char,anims,13,.75,char.Tool.Blade,.65,true)
end
cooldown = true
delay(cooldownwait, function() cooldown = false end)
hum:Move(Vector3.new(0,0,0))
if script.Parent:GetAttribute('Stage') == 'Attacker' then
local maxattackers = script.Parent.Parent.Parent:GetAttribute('MaxAttackers')
if callcd == false and (mod.CountStages('Stage','QuickAttacker',list) + mod.CountStages('Stage','Standby',list)) < (maxattackers) then
mod.CallForHelpAttack(script.Parent,1,list,script.Parent.Target.Value)
callcd = true
delay(10,function() callcd = false end)
end
end
if stage == 'QuickAttacker' then
if math.random(1,3) == 1 then
local attackers = mod.GetNpcsOfStage('Attacker',list)
for i,v in pairs(attackers) do
--v:SetAttribute('Stage','QuickAttacker')
end
--script.Parent:SetAttribute('Stage','Attacker')
end
end
end
end
end
end
The next part is the attack function that chances the attribute after.
local function Swing()
if char:GetAttribute('Stage','Attacker') or char:GetAttribute('Stage','QuickAttacker') then
char:SetAttribute('Stage','Swinging')
char.Head.AttackIndicator.Enabled = false
local hitbox = rayhitbox:Initialize(blade,{char,char.Parent:GetChildren()})
hitbox:DebugMode(false)
local function MoveForward()
hum:Move(Vector3.new(0,0,0))
hum.WalkSpeed = 3
local movetopos = Vector3.new(0,0,-1)
hum:Move(movetopos)
delay(.3,function() loadanim:Play() end)
delay(.65,function()hum:Move(Vector3.new(0,0,0))end)
hum.WalkSpeed = speed
if quick == true then
char:SetAttribute('Stage','Triggered')
elseif quick == false then
char:SetAttribute('Stage','Attacker')
end
end
coroutine.resume(coroutine.create(MoveForward))
hitbox.OnHit:Connect(function(hit,humanoid)
humanoid:TakeDamage(dmg)
end)
hitbox:HitStart()
delay(swingtime,function() hitbox:HitStop() end)
end
end
This is the part that runs when the attribute is changed to triggered
elseif stage == 'Triggered' then
local anim = script.Parent.Anims.Idle
local loadanim = hum:LoadAnimation(anim)
loadanim.Looped = true
loadanim:Play()
script.Parent.Humanoid:MoveTo(script.Parent.HumanoidRootPart.Position)
while stage == 'Triggered' do
wait(1)
local hrp = script.Parent.HumanoidRootPart
local targ = script.Parent.Target.Value
if script.Parent.Target.Value ~= nil and (hrp.Position - targ.Position).magnitude >= npcdistance then
script.Parent.Humanoid:MoveTo((targ.Position + Vector3.new(math.random((-1 * npcdistance),npcdistance),0,math.random((-1 * npcdistance),npcdistance)) - (script.Parent.Head.CFrame.LookVector * 5)))
end
if script.Parent.Target.Value == nil then
script.Parent:SetAttribute('Stage','Idle')
end
local list = {}
end
end
end)