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

My RPG Monster will only follow other monsters, but not me?

Asked by 6 years ago

So I've made a RPG Mob, but I can't get it to follow me, only other monsters?

My Goblin-Monster's Humanoidname = "Human" And the white one's Humanoidname is = "Humanoid"

https://gyazo.com/c8e06fce383a49a01ef82837de9395f1

My Goblin will only follow other "Mobs" with their Humanoid also named "Humanoid", and therefore I'm wondering why it can't follow me? If I get near it is just idling and does nothing?


Anyways here's my "MobManager" script

local Module = require(Game.ServerScriptService.MobFunctions)

local larm = script.Parent:FindFirstChild("Left Arm")
local rarm = script.Parent:FindFirstChild("Right Arm")
local Debounce = false
local OrigPos = script.Parent.Torso.Position

LinkedSword = nil
TicksUntilWander = 0

script.Parent.Name = script.Parent.SETTINGS.MobName.Value .. " [" .. script.Parent.SETTINGS.Lvl.Value.. "]"
script.Parent.Human.Health = script.Parent.Human.MaxHealth

--Damage on hit.
function DamagePlayer(Hit)
    if Hit.Parent:FindFirstChild("Humanoid") ~= nil and script.Parent.Human.Health > 0 then
        if Debounce == false then
            Debounce = true
            Module.AttackPlayer(script.Parent, Hit.Parent:FindFirstChild("Humanoid"), script.Parent.SETTINGS.MinDmg.Value, script.Parent.SETTINGS.MaxDmg.Value, script.Parent.SETTINGS.HitChance.Value, script.Parent.SETTINGS.CritChance.Value, script.Parent.SETTINGS.CritMagnitude.Value)
            wait(script.Parent.SETTINGS.CooldownMagnitude.Value/100)
            Debounce = false
        --else print("Debouncing")
        end
    else 
        return false
    end
end 

function RegisterTool(tool)
    if tool:IsA("Tool") then
        LinkedSword = tool
        LinkedSword.Handle.Touched:connect(DamagePlayer)
    end
end

larm.Touched:connect(DamagePlayer)
rarm.Touched:connect(DamagePlayer)
script.Parent.ChildAdded:connect(RegisterTool)

--XP and Gold on death.
function Died()
local tag = script.Parent.Human:FindFirstChild("creator") 
    if tag ~= nil then 
        if tag.Value ~= nil then 
            local Leaderstats = tag.Value:FindFirstChild("leaderstats") 
            if script.Parent.SETTINGS:FindFirstChild("XP") ~= nil and script.Parent.SETTINGS:FindFirstChild("Gold") ~= nil then
                Module.AddStats(Leaderstats, script.Parent.SETTINGS.XP.Value, script.Parent.SETTINGS.Gold.Value)
            else 
                print("Can't find XP and Gold!")
            end
        end
    end
    if script.Parent:FindFirstChild("Model") ~= nil then
        if script.Parent.Model:FindFirstChild("Part") ~= nil then
            script.Parent.Model:Destroy()
        end
    end
end

script.Parent.Human.Died:connect(Died)

--Spawn initial part for purpose of returning. The purpose of this is to fix the wander as they move in straight line unintentionally.
if script.Parent:FindFirstChild("Model") == nil then
    model = Instance.new("Model", script.Parent)
    part = Instance.new("Part", model)
    part.Anchored = true
    part.CanCollide = false
    part.Transparency = 1
    part.Position = OrigPos 
end

--Follow
function findNearestTorso(pos)
    local list = Game.Workspace:GetChildren()
    local torso = nil
    local dist = script.Parent.SETTINGS.ChaseRange.Value
    local temp = nil
    local human = nil
    local temp2 = nil
    for x = 1, #list do
        temp2 = list[x]
        if (temp2.className == "Model") and (temp2 ~= script.Parent) then
            temp = temp2:FindFirstChild("Torso")
            human = temp2:FindFirstChild("Humanoid")
            if (temp ~= nil) and (human ~= nil) and (human.Health > 0) and (script.Parent.Torso.Position - OrigPos).magnitude <= script.Parent.SETTINGS.ChaseDistance.Value then
                if (temp.Position - pos).magnitude < dist then
                    torso = temp
                    dist = (temp.Position - pos).magnitude
                end
            end

        end
    end
    return torso
end

while true do
    wait(0.2)
    --Chase
    local target = findNearestTorso(script.Parent.Torso.Position)
    if target ~= nil then
        script.Parent.Human:MoveTo(target.Position, target)
    end
    --Wander
    if TicksUntilWander > 0 then
        TicksUntilWander = TicksUntilWander - 1
    else        
        TicksUntilWander = math.random(10, 25)
        if target == nil then
            if script.Parent:FindFirstChild("Model") ~= nil then
                script.Parent.Human:MoveTo(Vector3.new(OrigPos.X + math.random(-script.Parent.SETTINGS.WanderRadius.Value, script.Parent.SETTINGS.WanderRadius.Value), OrigPos.Y, OrigPos.Z + math.random(-script.Parent.SETTINGS.WanderRadius.Value, script.Parent.SETTINGS.WanderRadius.Value)), script.Parent.Model:FindFirstChild("Part"))
            end
        end
    end
end
0
Because the mob test's humanoid is named Humanoid, like yours.. Change the mob test's Humanoid name and I think it should work. Or maybe change the white one's torso name mixgingengerina10 223 — 6y
0
As said my Humanoidname to the "Testmob" is Humanoid. And still if I remove the Testmob from the game, and nothing is near my "Goblin" except for me, it still wont follow me maxi66666 6 — 6y

2 answers

Log in to vote
1
Answered by 6 years ago

This is because you have R15 avatar type probably. Go to your place configuration and change your game Avatar Type to "Morph to R6". OR if you want to keep your avatar type R15, then you need to switch all Torso in your script with UpperTorso.

Ad
Log in to vote
0
Answered by 6 years ago
Edited 6 years ago

Try this in the 70s - 90s lines.

It's also the R15 type thing

function findNearestTorso(pos)
        local list = Game.Workspace:GetChildren()
        local torso = nil
        local dist = script.Parent.SETTINGS.ChaseRange.Value
        local temp = nil
            local human = nil
        local temp2 = nil
        for x = 1, #list do
            temp2 = list[x]
            if (temp2.className == "Model") and (temp2 ~= script.Parent) then
                temp = temp2:FindFirstChild("Torso")
                human = temp2:FindFirstChild("Humanoid")
                if (temp ~= nil) and (human ~= nil) and (human.Health > 0) and 
                  (script.Parent.Torso.Position - OrigPos).magnitude <= 
                     script.Parent.SETTINGS.ChaseDistance.Value then
                       local GetPlayer = game.Players:GetPlayerFromCharacter(temp2)
                         if GetPlayer then
                    if (temp.Position - pos).magnitude < dist then
                       torso = temp
                        dist = (temp.Position - pos).magnitude
            end
      end
     end
            end
        end
        return torso
    end


Answer this question