First: a timer is not a sleep() function like in other languages. It does not wait there and then continues where it left off. A timer is a commands that tells mIRC to run a command sometime later, but the current script just continues. This means that the timer should run 3 seconds later without even knowing what script activated it, so for the goto _place, the :_place cannot be found. Also, you set the timer to run 3 times each 3 seconds. That would mean each timer creates 3 more timers each creating 3 more timers ... -> that's a lot of timers smile

But, it is not the reason your script hangs...
You have a while loop with a condition that is never $false. %tempidle starts at 1 and you increase it every iteration, so it will never become 0. Since mIRC only uses one thread, and it's now running an endless loop, your mIRC 'hangs'.

As for your script type /help /inc first and then do this:

on 1:CONNECT: { set %idle = 0 | inc -c %idle }

This will set %idle to 0 and then increase it by one every second.
You'll probably also need some other events to reset your idle time, it's the same two commands.