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

How to make a wow like mob target system?

Hi, I'm trying to make a mob/npc/creature/whatever you want to call it targeting system, basically when you click on something that has the target circle as a child, it the circle would become visible and when you click away from the thing or clicked on another thing that had a target circle as a child it would switch to that one.

I've tried to attempt this by myself but after countless tears of rage have been shed I decided that maybe I should stop metaphorically bashing my head against a wall and ask for help.

---This is my attempt---- don't laugh at me...

----------------------------------------------------------------------

local Player = game.Players.LocalPlayer
local Mouse = Player:GetMouse()


local function target()

if  Mouse.Target.Parent:FindFirstChild("Target") then
	Mouse.Target.Parent:FindFirstChild("Target").Transparency = 0

	return Mouse.Target.Parent:FindFirstChild("Target")
end

end


local function untarget()
	local targeted = target()
if targeted == nil then
			Mouse.Target.Parent:FindFirstChild("Target").Transparency = 1
end
end


Mouse.Button1Down:Connect(untarget)

----------------------------------------------------------------------

2 answers

✓ Accepted answer

Hello, here is a quick example I made for you.

local selected

for _,v in pairs(workspace:GetChildren()) do
	if (v:FindFirstChild("ClickDetector") ~= nil) then --use a folder so you don't need this
		v.ClickDetector.MouseClick:Connect(function()
			if selected ~= nil then
				unselect()
			end
			doselect(v)
		end)
	end
end

function unselect()
	selected.Color = Color3.new(163,162,165)
	selected = nil	
end

function doselect(part)
	selected = part
	selected.Color = Color3.new(0,200,0)
end

local selected you declare the selected variable, which will be the currently selected entity or whatever

for _,v in pairs(workspace:GetChildren()) do this is pretty much just a way to loop through the children (not descendants) of workspace, you might change that to a folder which contains your entities. I like to use _, v, you can think of it as key, value, but in a loop like this key is always an index number, so we can ignore that.

You don't necessarily need the next line if you're using a folder and 100% sure you'll only have entities in there.

Moving on.

	v.ClickDetector.MouseClick:Connect(function()
		if selected ~= nil then
			unselect()
		end
		doselect(v)
	end)

...

function unselect()
	selected.Color = Color3.new(163,162,165) -- replace
	selected = nil	
end

function doselect(part)
	selected = part
	selected.Color = Color3.new(0,200,0) -- replace
end

So this is possible because when you call Connect it doesn't just pause execution until the MouseClick function is called, so you can actually do this in a loop for multiple instances.

Then, we check if there is a currently selected entity, and if there is, we call unselect. Then we select the new one.

This could be simplified however I feel like it's easier to understand this way.

1 comment

1

Thanks for the help man! Works like a charm.

Hello,

This is a short explanation; maybe use click Detectors in the parts and when clicked parent the Circle to the part?. Make sure to parent the parts in a folder in Workspace. To Get the circle back from the old part what you can do is wrap the if statement in a pairs loop like below,

Code Example, Parenting Circle to clicked Part.

script.Parent.ClickDetector.MouseButton1Click:Connect(function()
	for _,Instance in pairs(game.Workspace.Folder:GetChildren) do
		if Instance:FindFirstChild("Target") ~= nil then
				Instance.Target.Parent = script.Parent
		end
	end
end)

I hope your head and the wall you banged your head with recover soon....lol

1 comment

0

I managed to make it so that when you click on a "NPC" the green circle becomes visible using your method however I'm not certain how to go about the second part which would be moving it from one "NPC" to another.

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