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

Is there a way i can decrease the damage that this npc does?

Asked by 3 years ago

I have this NPC I'm making and I used a free model and turned it into something else I couldn't find out how to decrease the health it does here's the two scripts that came inside not including the animation script

debugMode = false
targetNPCs = false

--

h = script.Parent.Parent:WaitForChild("Humanoid")
pathService = game:GetService("PathfindingService")
targetV = script.Parent:WaitForChild("Target")

function closestTargetAndPath()
    local humanoids = {}
    if targetNPCs then
        local function recurse(o)
            for _,obj in pairs(o:GetChildren()) do
                if obj:IsA("Model") then
                    if obj:findFirstChild("Humanoid") and obj:findFirstChild("Torso") and obj.Humanoid ~= h and obj.Humanoid.Health > 0 and not obj:findFirstChild("ForceField") then
                        table.insert(humanoids,obj.Humanoid)
                    end
                end
                recurse(obj)
            end
        end
        recurse(workspace)
    else
        for _,v in pairs(game.Players:GetPlayers()) do
            if v.Character and v.Character:findFirstChild("HumanoidRootPart") and v.Character:findFirstChild("Humanoid") and v.Character.Humanoid.Health > 0 and not v:findFirstChild("ForceField") then
                table.insert(humanoids,v.Character.Humanoid)
            end
        end
    end
    local closest,path,dist
    for _,humanoid in pairs(humanoids) do
        local myPath = pathService:ComputeRawPathAsync(h.Torso.Position,humanoid.Torso.Position,500)
        if myPath.Status ~= Enum.PathStatus.FailFinishNotEmpty then
            -- Now that we have a successful path, we need to figure out how far we need to actually travel to reach this point.
            local myDist = 0
            local previous = h.Torso.Position
            for _,point in pairs(myPath:GetPointCoordinates()) do
                myDist = myDist + (point-previous).magnitude
                previous = point
            end
            if not dist or myDist < dist then -- if true, this is the closest path so far.
                closest = humanoid
                path = myPath
                dist = myDist
            end
        end
    end
    return closest,path
end

function goToPos(loc)
    h:MoveTo(loc)
    local distance = (loc-h.Torso.Position).magnitude
    local start = tick()
    while distance > 4 do
        if tick()-start > distance/h.WalkSpeed then -- Something may have gone wrong. Just break.
            break
        end
        distance = (loc-h.Torso.Position).magnitude
        wait()
    end
end

while wait() do
    local target,path = closestTargetAndPath()
    local didBreak = false
    local targetStart
    if target and h.Torso then
        targetV.Value = target
        targetStart = target.Torso.Position
        roaming = false
        local previous = h.Torso.Position
        local points = path:GetPointCoordinates()
        local s = #points > 1 and 2 or 1
        for i = s,#points do
            local point = points[i]
            if didBreak then 
                break
            end
            if target and target.Torso and target.Health > 0 then
                if (target.Torso.Position-targetStart).magnitude < 1.5 then
                    local pos = previous:lerp(point,.5)
                    local moveDir = ((pos - h.Torso.Position).unit * 2)
                    goToPos(previous:lerp(point,.5))
                    previous = point
                end
            else
                didBreak = true
                break
            end
        end
    else
        targetV.Value = nil
    end
    if not didBreak and targetStart then
        goToPos(targetStart)
    end
end
local target = script.Parent:WaitForChild("Target")
local torso = script.Parent.Parent:WaitForChild("Torso")
local down = script.Parent:WaitForChild("MouseDown")

function handler(new)
    if target.Value then
        while target.Value == new do
            if target.Value and target.Value.Parent == nil then
                target.Value = nil
                return
            end
            local look = (new.Torso.Position-torso.Position).unit * 300
            local hit = workspace:FindPartOnRayWithIgnoreList(Ray.new(torso.Position,look),{script.Parent.Parent,new.Parent})
            if not hit or (new.Torso.Position-torso.Position).magnitude < 10 then
                down:Fire(new.Torso.Position)
            end
            wait(0.2)
        end
    end
end

target.Changed:connect(handler)

if target.Value then
    handler(target.Value)
end
0
The damage is done in a Server-script. Ziffixture 6913 — 3y
0
how would i go abouts doing that matty123465 11 — 3y
0
What Model Did you use? maybe link it to me so i can have a check CrazyCats84 154 — 3y

1 answer

Log in to vote
0
Answered by 3 years ago

Have you Tried Checking The Torso in the NPC, it might have a script that damages you if you Touch it. (Or any other body part?)

Ad

Answer this question