Ой, не, так плохо. Нам нет смысла гонять цикл "постоянно" (с поправкой на расстояние). Если возвращаться к диалогам типа "Я продам 5/10/15... книг", то проще всего весь скрипт (тот что отвечает за продажу) вынести в UDF и просто из Result Script диалога его вызывать. Количество книг передавать как переменную. Тогда и глобальные не нужны будут. Таким образом весь скрипт будет срабатывать единожды, только во время диалога и не будет грузить игру лишними проверками. Для диалогов в условия вполне достаточно GetItemCount - он и с форм-листами работает (считает суммарное количество предметов, что нам и нужно).