О конкретном ограничении не слышал. Не знаю, какие проверки требуются в Вашем случае, но я бы попробовал несколько потоков с отдельными проверками заменить на последовательные проверки в одном потоке, если это возможно, так более надёжно будет. Использовал startThread только один раз (нужен был вызов функции каждый раз, когда герой получает опыт), всё хорошо работало, ставил sleep(5). Зависание возможно из-за бесконечного цикла (где-то там, где у Вас --some code)?
Если же делать эту проверку триггерами, то получится, что одну функцию придётся прописать в нескольких местах - в функции, триггерируемой потерей героя, в функциях, триггерируемых захватом городов (а каждая группа городов имеет свою отдельную функцию-обработчик). Это делает поддержку кода более сложной.
Плюс проверка разовых событий - для new day триггер-функции я планировал прописывать именно что регулярные события, чтобы не перегружать её.
Сценарии:
"Холм мертвецов"
"Священное древо"