Я вот то же мысль хочу высказать, а то функции без дела простаивают 
Есть такой набор функций:
•external.InitVal(key,val) - если не существует переменной с именем key, то она создается и ей присваивается значение val. Если переменная уже есть - оставляет её значение без изменения
•external.SetVal(key,val) - как и InitVal, но присваивает значение в любом случае
•external.GetVal(key) - возвращает значение переменной key
Я их какрас и создавал для удобного обмена и хранения значений между разными аспектами бота: плагины, маршруты, приёмы.
Как я вижу использование.
Берём мою редакцию плагина. Я в неё добавил строку
external.SetVal("isTokenTraderClicked",true);
isTokenTraderClicked - просто набор букв.
Дальше маршрут:
1) В ячейку до обменника
координата : external.SetVal("isTokenTraderClicked",false); UseObjects(); AttackMobs(); Walk("куда-то");
2) В ячейку с обменником(вроде это та ячейка...не уверен)
1c5a3f3164a09ff92d3c9c517452bd1b : if(!external.GetVal("isTokenTraderClicked")) UseObjects(); AttackMobs(); Walk("rl");
Что должно получиться:
1) За одну ячейку до обменника мы говорим, что ещё не обменивались
2) На ячейке с обменником мы делаем UseObjects(); только если ещё не обменивались
3) Когда срабатывает плагин и нажимает Завершить диалог, устанавливается значение, что уже обменялись и повторного клика по обменнику быть не должно.
Software is like sex: it's better when it's free! © LinusTorvalds