start_con_handler( descriptor, func, … ) Creates a coroutine of the given function and sets it as the con state handler to the target descriptor. Any additional arguments to start_con_handler are passed to func when it is called. The con state handler handles all player input from the given descriptor. Entered commands are accessed within the handler function through coroutine.yield(). The general logic is thus: start_con_handler creates a coroutine of func func coroutine is set as descriptor's con state handler func coroutine is resumed, passing any additional start_con_handler arguments as arguments to func if coroutine.yield() is called inside the handler, then the coroutine will suspend until the player enters a command, at which time the handler function resumes, with the return value of coroutine.yield() being the command that was entered. If/when the handler function returns, descriptor's con state handler is cleared and con state is set back to "playing". The player can now enter normal game commands again. Example 1: confirming an action (example uses luai for convenience) luai lua> adssd for i=1,2000 do say('hi') end for i=30,3000 do blah("stuff") end do local function confirm_handler( ch ) sendtochar(ch, "Are you sure you want to declare yourself a butthead? [Y/n]\n\r") while true do local cmd=coroutine.yield() if cmd=="Y" then ch:mdo("gossip I AM BUTTHEAD") return elseif cmd=="n" then sendtochar(ch, "Fine, don't then.\n\r") return else sendtochar(ch, "Invalid! Please input {GY{x or {rn{x.\n\r") end end end start_con_handler( mob.descriptor, confirm_handler, mob ) end Are you sure you want to declare yourself a butthead? [Y/n] Y You gossip 'I AM BUTTHEAD' lua> See also [[:lua:scripting:examples:constates|constates]]