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

Why won't this sword do damage?

Asked by
Spooce 78
10 years ago

Error: Workspace.Sword.SwordScript:37: attempt to index local 'hitBindable' (a nil value)

local DebrisService = game:GetService("Debris")
local PlayersService = game:GetService('Players')
local damage = 10
local SLASH_DAMAGE = 40.5
local LUNGE_DAMAGE = 54
local OVERHEAD_SLASH_DAMAGE = 90
local Tool = script.Parent
local Handle = Tool:WaitForChild('Handle')
local MyCharacter
local MyHumanoid
local PlaySlash
local PlayThrust
local PlayOverhead
local AttackSequence = {}
local SlashSound = Handle:WaitForChild('SlashSound')
local OverheadSound = Handle:WaitForChild('OverheadSound')
local LungeSound = Handle:WaitForChild('LungeSound')
local UnsheathSound = Handle:WaitForChild('UnsheathSound')
local HitSound = Handle:WaitForChild('HitSound')
local HitCharacters
local CreatorTag = nil
function Blow(hit)
    if (hit.Parent == nil) then return end
    local humanoid = hit.Parent:findFirstChild("Humanoid")
    local vCharacter = Tool.Parent
    local hum = vCharacter:findFirstChild("Humanoid")
    if humanoid~=nil and humanoid ~= hum and hum ~= nil and HitCharacters and not HitCharacters[humanoid.Parent] and hum.Health>0 then
        local right_arm = vCharacter:FindFirstChild("Right Arm")
        if (right_arm ~= nil) then
            local joint = right_arm:FindFirstChild("RightGrip")
            if (joint ~= nil and (joint.Part0 == Handle or joint.Part1 == Handle)) then
                HitCharacters[humanoid.Parent] = true
                local hitBindable = humanoid:FindFirstChild('Hit')
                if hitBindable then
                        HitSound:Play()
                    end
                    hitBindable:Invoke(damage, CreatorTag)
                else
                    print("Could not find BindableFunction 'Hit'")
                end
            end
        end
    end
function Attack()
    damage = SLASH_DAMAGE
    SlashSound:play()
    if PlaySlash then
        PlaySlash.Value = not PlaySlash.Value
    end
    wait(0.6)
end
function OverheadSlash()
    damage = OVERHEAD_SLASH_DAMAGE
    if PlayOverhead then
        PlayOverhead.Value = not PlayOverhead.Value
    end
    LungeSound:play()
    local force = Instance.new("BodyVelocity")
    force.velocity = Vector3.new(0,10,0)
    DebrisService:AddItem(force, 0.5)
    force.Parent = Tool.Parent.Torso
    wait(0.6)
end
function Lunge()
    damage = LUNGE_DAMAGE
    OverheadSound:Play()
    if PlayThrust then
        PlayThrust.Value = not PlayThrust.Value
    end
    wait(.45)
    swordOut()
    wait(.05)
    if force then
        force.Parent = nil
    end
    wait(.15)
    swordUp()
    damage = SLASH_DAMAGE
end
function swordUp()
    Tool.GripForward = Vector3.new(1,0,0)
    Tool.GripRight = Vector3.new(0,0,1)
    Tool.GripUp = Vector3.new(0,1,0)
end
function swordOut()
    Tool.GripForward = Vector3.new(0,-1,0)
    Tool.GripRight = Vector3.new(0,0,1)
    Tool.GripUp = Vector3.new(-1,0,0)
end
table.insert(AttackSequence, Attack)
table.insert(AttackSequence, Lunge)
table.insert(AttackSequence, OverheadSlash)
local CurrentIndex = 1
local LastAttackTime = tick()
Tool.Enabled = true
function OnActivated()
    if Tool.Parent:IsA('Model') and Tool.Enabled and MyCharacter and MyHumanoid and MyHumanoid.Health > 0 then
        Tool.Enabled = false
        HitCharacters = {[MyCharacter] = true}
        local now = tick()
        if now - LastAttackTime > 1.5 then
            CurrentIndex = 1
        else
            CurrentIndex = CurrentIndex + 1
        end
        LastAttackTime = now
        if CurrentIndex > #AttackSequence then
            CurrentIndex = 1
        end
        AttackSequence[CurrentIndex]()
        if MyHumanoid == nil then
            print("Humanoid not found")
            return 
        end
        HitCharacters = nil
        Tool.Enabled = true
    end
end
function OnEquipped()
    Tool.GripPos = Vector3.new(0, -1.7, 0)
    delay(0.55, function() UnsheathSound:play() end)
    MyCharacter = Tool.Parent
    MyHumanoid = MyCharacter:FindFirstChild('Humanoid')
    PlaySlash = Tool:WaitForChild('PlaySlash')
    PlayOverhead = Tool:WaitForChild('PlayOverhead')
    PlayThrust = Tool:WaitForChild('PlayThrust')
    CreatorTag.Value = PlayersService:GetPlayerFromCharacter(MyCharacter)
end
CreatorTag = Instance.new('ObjectValue')
CreatorTag.Name = 'creator'
Tool.Activated:connect(OnActivated)
Tool.Equipped:connect(OnEquipped)
connection = Handle.Touched:connect(Blow)

1 answer

Log in to vote
0
Answered by 10 years ago

The solution is simple: you're trying to call Humanoid.Hit.

0
Didn't work. :L Spooce 78 — 10y
Ad

Answer this question