Hello, im scripting an NPC. After setting the pathfinding functions, i’ve connected it in a While loop inside a spawn. There are 2 loops playing in spawns, one for constantly checking if there is a player neaby, other checking if the character is attacking someone or it can move around for a random position.
To know when the NPC is attacking or not, I crate this variable called “attacking”. It is suposed to be set to 5 in the second loop everywhen a player is detected nearby, and then the first loop stops moving the NPC to random positions and wait until the attacking goes down from 5 to 0. With this, i want the NPC to remain in “attacking” state for 5 seconds after it stops detecting a player, and want it not to move randomly while attacking. The second loop though keeps moving the NPC to the nearest sensed player constantly.
The problem is: the attacking variable seems to stop being set to 5 when the loop “while attacking > 0 do” is running. I dont want this to happen and dont expect it sinse they are in 2 separate threads. When printing the attacking variable constantly, it starts to go down until 0 instead of keep constantly in 5 while following the player, and when it reaches 0, it goes to 5 again. Weird. With a print right after “attacking = 5” i checked that it really sets to 5 on that loop, but then looks like that 5 does not became the global variable “attacking”, the output goes (nearly) like this:
5
4.9
5
4.8
5
4.7
5
4.6
5
4.5
...
The code:
local attacking = 0
local ViewAngle = 90
spawn(function()
while wait(math.random(3,8)) do
if attacking <= 0 then
followPath(center + Vector3.new(math.random(-30,30), 0 , math.random(-30,30)))
else
while attacking > 0 do
print(attacking)
attacking = attacking - wait()
end
ViewAngle = 90
end
end
end)
spawn(function()
while wait() do
local plrs = GetPlayersInFront(Root, ViewAngle, 40)
if plrs then
closer = getCloser(plrs)
if closer then
attacking = 5
ViewAngle = 360
followPath(closer.Position)
end
end
end
end)