Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

How would I add animations to this R15 Sword Script?

Asked by 7 years ago

Hello, I have an R15 Compatible Sword Script. It has no animations due to old animations being either non-existant and or, R6 only. I have all my animations as children of the sword itself and all I need is someone to help me add in the animations I have, they are as follows, 1. Equip 2. Attack 3. Lunge and here is my script,

local Tool = script.Parent
local Handle = Tool.Handle
local Config = Tool:WaitForChild'Configurations'
local Sword = {
    DoubleClickMaxTime = 0.2,
    LocalDoubleClickMaxTime = 0.2,
    State = 'Idle',
    LocalState = 'Idle',
    SlashingStartedAt = 0,
    LocalSlashingStartedAt = 0,
    AttackTicket = 0,
    LocalAttackTicket = 0,
    DestroyOnUnequip = {}
}

local GLib = require(Tool:WaitForChild'GLib')

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.HumanoidRootPart
    Sword.DestroyOnUnequip[force] = true
    wait(0.25)
    Tool.Grip = CFrame.new(0, -1.5, 0, 0, 1, 0, 0, 0, -1, -1, 0, 0)
    wait(0.25)
    force:Destroy()
    Sword.DestroyOnUnequip[force] = nil
    wait(0.5)
    Tool.Grip = CFrame.new(0, -1.5, 0, 0, 0, 1, 0, 1, 0, -1, 0, 0)
    Sword.State = 'Idle'
end

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

function Sword:Animate(name)
    local tag = Instance.new'StringValue'
    tag.Name = 'toolanim'
    tag.Value = name
    tag.Parent = Tool
end

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

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

return Sword

Thank you if you are able to help! Killerburger111

Answer this question