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

How come this throwing knife does no damage?

Asked by 5 years ago
Edited 5 years ago

Here is the link: https://web.roblox.com/library/185387161/Throwing-Mad-Murderer-Knife

Could someone help by fixing up the code?

Here it is:

    --------------------- TEMPLATE BLADE WEAPON ---------------------------

-- Waits for the child of the specified parent

local function WaitForChild(parent, childName)

while not parent:FindFirstChild(childName) do parent.ChildAdded:wait() end

return parent[childName]

end





local SLASH_DAMAGE = 100

local DOWNSTAB_DAMAGE = 100

local THROWING_DAMAGE = 100

local HOLD_TO_THROW_TIME = 0.38





local Damage = 100



local MyHumanoid = nil

local MyTorso = nil

local MyCharacter = nil

local MyPlayer = nil



local Tool = script.Parent

local Handle = WaitForChild(Tool, 'Handle')



local BlowConnection

local Button1DownConnection

local Button1UpConnection



local PlayStabPunch

local PlayDownStab

local PlayThrow

local PlayThrowCharge



local IconUrl = Tool.TextureId -- URL to the weapon knife icon asset



local DebrisService = game:GetService('Debris')

local PlayersService = game:GetService('Players')



local SlashSound



local HitPlayers = {}



local LeftButtonDownTime = nil



local Attacking = false



function Blow(hit)

if Attacking then

BlowDamage(hit, Damage)

end

end



function BlowDamage(hit, damage)

local humanoid = hit.Parent:FindFirstChild('Humanoid')

local player = PlayersService:GetPlayerFromCharacter(hit.Parent)

if humanoid ~= nil and MyHumanoid ~= nil and humanoid ~= MyHumanoid then

if not MyPlayer.Neutral then

-- Ignore teammates hit

if player and player ~= MyPlayer and player.TeamColor == MyPlayer.TeamColor then

return

end

end

-- final check, make sure weapon is in-hand

local rightArm = MyCharacter:FindFirstChild('Right Arm')

if (rightArm ~= nil) then

-- Check if the weld exists between the hand and the weapon

local joint = rightArm:FindFirstChild('RightGrip')

if (joint ~= nil and (joint.Part0 == Handle or joint.Part1 == Handle)) then

-- Make sure you only hit them once per swing

TagHumanoid(humanoid, MyPlayer)

print("Sending " .. damage)

local checksound = humanoid.Parent:findFirstChild("Sound")

if checksound == nil then

local givesound = script.Parent.Sound:clone()

givesound.Parent = humanoid.Parent

givesound.Disabled = false

else

checksound:remove()

local givesound = script.Parent.Sound:clone()

givesound.Parent = humanoid.Parent

givesound.Disabled = false

end

wait()

humanoid:TakeDamage(humanoid.MaxHealth)

if humanoid.Health == math.huge or humanoid.MaxHealth == math.huge then

humanoid.Parent:BreakJoints()

end

end

end

end

end



function TagHumanoid(humanoid, player)

-- Add more tags here to customize what tags are available.

while humanoid:FindFirstChild('creator') do

humanoid:FindFirstChild('creator'):Destroy()

end



local creatorTag = Instance.new('ObjectValue')

creatorTag.Value = player

creatorTag.Name = 'creator'

creatorTag.Parent = humanoid

DebrisService:AddItem(creatorTag, 1.5)



local weaponIconTag = Instance.new('StringValue')

weaponIconTag.Value = IconUrl

weaponIconTag.Name = 'icon'

weaponIconTag.Parent = creatorTag

DebrisService:AddItem(weaponIconTag, 1.5)

end



function HardAttack()

Damage = SLASH_DAMAGE

HitSound:play()

if PlayStabPunch then

PlayStabPunch.Value = true

wait(1.0)

PlayStabPunch.Value = false

end

end



function NormalAttack()

Damage = DOWNSTAB_DAMAGE

KnifeDown()

HitSound:play()

if PlayDownStab then

PlayDownStab.Value = true

wait(1.0)

PlayDownStab.Value = false

end

KnifeUp()

end



function ThrowAttack()

KnifeOut()

if PlayThrow then

PlayThrow.Value = true

wait()

if not Handle then return end

local throwingHandle = Handle:Clone()

DebrisService:AddItem(throwingHandle, 5)

throwingHandle.Parent = game.Workspace

if MyCharacter and MyHumanoid then

throwingHandle.Velocity = (MyHumanoid.TargetPoint - throwingHandle.CFrame.p).unit * 100

-- set the orientation to the direction it is being thrown in

throwingHandle.CFrame = CFrame.new(throwingHandle.CFrame.p, throwingHandle.CFrame.p + throwingHandle.Velocity) * CFrame.Angles(0, 0, math.rad(-90))

local floatingForce = Instance.new('BodyForce', throwingHandle)

floatingForce.force = Vector3.new(0, 196.2 * throwingHandle:GetMass() * 0.98, 0)

local spin = Instance.new('BodyAngularVelocity', throwingHandle)

spin.angularvelocity = throwingHandle.CFrame:vectorToWorldSpace(Vector3.new(0, -400, 0))

end

Handle.Transparency = 1

-- Wait so that the knife has left the thrower's general area

wait()

if throwingHandle then

local Throwevent = script.Parent.ThrowHandleHitWeld:Clone()

Throwevent.Parent = throwingHandle

Throwevent.Disabled = false

local touchedConn = throwingHandle.Touched:connect(function(hit) print("hit throw") BlowDamage(hit, THROWING_DAMAGE) end)

end

-- must check if it still exists since we waited

if throwingHandle then

throwingHandle.CanCollide = true

end

wait(0.6)

if Handle and PlayThrow then

Handle.Transparency = 0

PlayThrow.Value = false

end

end

KnifeUp()

end



function KnifeUp()

Tool.GripForward = Vector3.new(0,0,-1)

Tool.GripRight = Vector3.new(1,0,0)

Tool.GripUp = Vector3.new(0,1,0)

end



function KnifeDown()

Tool.GripForward = Vector3.new(0,0,-1)

Tool.GripRight = Vector3.new(1,0,0)

Tool.GripUp = Vector3.new(0,-1,0)

end



function KnifeOut()

Tool.GripForward = Vector3.new(0,0,-1)

Tool.GripRight = Vector3.new(1,0,0)

Tool.GripUp = Vector3.new(0,1,0)

end



Tool.Enabled = true



function OnLeftButtonDown()

LeftButtonDownTime = time()

if PlayThrowCharge then

PlayThrowCharge.Value = true

end

end



function OnLeftButtonUp()

if not Tool.Enabled then return end

-- Reset the list of hit players every time we start a new attack

HitPlayers = {}

if PlayThrowCharge then

PlayThrowCharge.Value = false

end

if Tool.Enabled and MyHumanoid and MyHumanoid.Health > 0 then

Tool.Enabled = false

local currTime = time()

if LeftButtonDownTime and currTime - LeftButtonDownTime > HOLD_TO_THROW_TIME and

currTime - LeftButtonDownTime < 1.15 then

ThrowAttack()

else

Attacking = true

if math.random(1, 2) == 1 then

HardAttack()

else

NormalAttack()

end

Attacking = false

end

Tool.Enabled = true

end

end



function OnEquipped(mouse)

PlayStabPunch = WaitForChild(Tool, 'PlayStabPunch')

PlayDownStab = WaitForChild(Tool, 'PlayDownStab')

PlayThrow = WaitForChild(Tool, 'PlayThrow')

PlayThrowCharge = WaitForChild(Tool, 'PlayThrowCharge')

SlashSound = WaitForChild(Handle, 'Swoosh1')

HitSound = WaitForChild(Handle, 'Ting')

SlashSound:play()

BlowConnection = Handle.Touched:connect(Blow)

MyCharacter = Tool.Parent

MyTorso = MyCharacter:FindFirstChild('Torso')

MyHumanoid = MyCharacter:FindFirstChild('Humanoid')

MyPlayer = PlayersService.LocalPlayer

if mouse then

Button1DownConnection = mouse.Button1Down:connect(OnLeftButtonDown)

Button1UpConnection = mouse.Button1Up:connect(OnLeftButtonUp)

end

KnifeUp()

end



function OnUnequipped()

-- Unequip logic here

if BlowConnection then

BlowConnection:disconnect()

BlowConnection = nil

end

if Button1DownConnection then

Button1DownConnection:disconnect()

Button1DownConnection = nil

end

if Button1UpConnection then

Button1UpConnection:disconnect()

Button1UpConnection = nil

end

MyHumanoid = nil

end





Tool.Equipped:connect(OnEquipped)

Tool.Unequipped:connect(OnUnequipped)
0
put it in code format Clasterboy 72 — 5y
0
there JustDash141 0 — 5y
0
the teammates may be in the "neutral" team. Try putting prints to see where it stops working. SaltyIceberg 81 — 5y

Answer this question