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

How do you make a weapon do damage only to NPC's and not players?

Asked by 3 years ago
Edited 3 years ago

I want to make a game that is so you can't hurt other players, but can hurt humanoid NPC's can somebody help me with how to do this? I've searched for videos and googled it but there wasn't anything on this specific topic. Please reply and help.

Thank you!

2 answers

Log in to vote
0
Answered by
pwx 1581 Moderation Voter
3 years ago

You could use a Player check using GetPlayerFromCharacter()?

local Players = game:GetService('Players')

Blade.Touched:Connect(function(Hit)
    local Player = Players:GetPlayerFromCharacter(Hit.Parent)
    if not Player then -- makes sure isn't player
    local Humanoid = hit.Parent:FindFirstChild('Humanoid') -- finds humanoid
    if Humanoid then
        -- damage stuff here
    end
end)
Ad
Log in to vote
0
Answered by 3 years ago

How would I implement the script into this knife script?

local parent = script.Parent
local Handle = parent:WaitForChild("Handle")
local Creator = parent:WaitForChild("Creator")
CanDmg = false
Can = true
parent.Equipped:Connect(function()
    Handle.Equip:Play()
    if Creator.Value == nil then
    Creator.Value = parent.Parent end
end)
parent.Unequipped:Connect(function()
    Handle.UnEquip:Play()
end)
repeat wait() until Creator.Value ~= nil
parent.Activated:Connect(function()
    if Handle.Transparency == 1 then return end
    function slash()
        print("hip")
        local creator = Creator.Value
        local Animations = parent:WaitForChild("Animations")
        local AnimChild = Animations:GetChildren()
        local AnimRad = math.random(1,#AnimChild)
        local AnimSel = AnimChild[AnimRad]
        local AP = creator:WaitForChild("Humanoid"):LoadAnimation(AnimSel)
        if Can == true then
        Can = false
        AP:Play()
        wait(0.15)
        CanDmg = true
        Handle.Swing:Play()
        Handle.SlashTrail.Enabled = true
        wait(0.25)
        CanDmg = false
        Handle.SlashTrail.Enabled = false
        wait(0.06)
        Can = true
        end
    end
    slash()
end)
function on(t)
    local h = t.Parent:FindFirstChildOfClass("Humanoid")
    if h ~= nil and CanDmg == true then
        CanDmg = false
        local cre = Creator.Value
        h:TakeDamage(parent.Dmg.Value)
        Handle.Swing:Stop()
        Handle.Hit:Play()
        if h.Health>0 then
        if not h:FindFirstChild("creator") then
            local ov = Instance.new("ObjectValue",h)
            ov.Name = "creator"
            ov.Value = game.Players:WaitForChild(cre.Name)
            else
            local ovs = h:GetChildren()
            for i = 1,#ovs do
            if (ovs[i].Name == "creator") then
            ovs[i].Value = game.Players:WaitForChild(cre.Name) end
            end
            end
        end
    end
end
Handle.Touched:Connect(on)

Answer this question