Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

Why won't this sword do damage?

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

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

1 comment

0

Didn't work. :L

This discussion is preserved as it was. New answers, comments, and votes are closed.