Jump to content
Alloder.pro: about Allods with love
Search In
  • More options...
Find results that contain...
Find results in...

New program for writers

We turn from quantity to quality and tell you how we will supplement the Allods Team program with rewards in rubles.

More

The new Updater

Let us to introduce the new addon updater software and to share the details

Read more

Alloder 2.0

We have started the process of project evolve, and this relates not only, and not even primarily of the site's view

Read more

Связь аддона со сторонним приложением


Guest Dside
 Share

Recommended Posts

Пока не буду распространяться для чего, поскольку планы ещё не до конца ясны, но вопрос определён довольно точно:

Насколько реально наладить аддоном связь со сторонним приложением?

Я видел, что возможна запись в текстовые файлы. Есть ли что-нибудь ещё подобное?

То есть, с файлами получается примерно следующее:

> аддон записывает результаты своей работы в файл

> каждые N секунд программа просматривает этот файл (путь указывается через настройки), стирает содержимое и выполняет команду, данную ей через него

PS: я никоим образом не знаком с Lua, но в программировании смыслю, правда, в ООП пока не силён.

PPS: идея не имеет отношения к ботоводству, это задумывалось как инструмент некоторой инфо-поддержки для гильдий.

Заранее спасибо за ответ,

D-side.

Link to comment
Share on other sites

Насколько я знаю, на сегодня аддоны могут сохранять данные только в 2 файла: Personal\user.cfg (файл настроек игры) и Personal\Logs\mods.txt (файл отладки аддонов). При этом запущенная игра первый из этих файлов держит в ОЗУ = любая запись в файл сторонней программой будет перезаписана игрой. То есть, если файл необходимо ни только читать, но и писать в него - можно использовать mods.txt. Но лучше делать проверку на запущенность игры и писать в user.cfg, так как mods.txt может не хило раздуваться от ошибок различных аддонов. Ни каким другим способом связать действие аддона с программой сейчас нельзя (опять-таки: насколько я в теме).

Как пример работы с mods.txt, можно посмотреть AIE, которая раз в 10 минут при соотв. настройках просматривает mods.txt, сохраняет ошибки каждого из аддонов в отдельный файл, а лог чата аддона ChatLogByN00b разбивает по дате (сохраняет лог каждого дня в отдельный файл). В этой же программе можно посмотреть и пример работы с user.cfg, если установить аддон aGAI - программа построит список персонажей для экспорта из user.cfg автоматически.

Link to comment
Share on other sites

Принципиальная разница между User.cfg и Mods.txt в том, что в User.cfg можно писать, и можно его читать (НО только аддоном, а сторонняя программа не может ничего туда записать во время работы игры, Abagor объяснил, почему). В Mods.txt можно только писать. Кроме того, User.cfg - это файл конфигурации, в который можно как добавлять новую информацию, так и перезаписывать старую. А Mods.txt - это обычный лог-файл, где каждая новая запись добавляет новую строку.

Quote:

> аддон записывает результаты своей работы в файл

> каждые N секунд программа просматривает этот файл (путь указывается через настройки), стирает содержимое и выполняет команду, данную ей через него

Для этого можно использовать любой из двух файлов, но, имхо, лучше подойдёт User.cfg. Только стирать из него ничего нельзя, пусть аддон просто перезаписывает одну и ту же таблицу по верху, но каждый раз, с каким-нибудь новым признаком, чтобы программа соображала, когда эта таблица обновилась. В качестве такого признака лучше всего подойдёт порядковый номер команды (1, 2, 3, ...).

Впрочем, если есть вероятность, что команды могут быть отправлены с интервалом меньше секунды, то User.cfg не подходит, т.к. аддон тупо перезапишет одну команду другой, и программа одну команду упустит. Тогда, лучше пользоваться Mods.txt. Тоже, наверное, можно ничего не стирать, просто к командам приписывать порядковые номера.

Link to comment
Share on other sites

Quote:
программа одну команду упустит

Меньше секунды - не бодает. Специфика команд такая, что нужно просмотреть результаты её работы или вполне реально попросить пользователя ожидать секунд 10 для перехвата и обработки команды базой данных.

Нюанс: пост выше - если user.cfg держится в ОЗУ, то как часто идёт сохранение? Раз в секунду?

То есть, из игры возможен только вывод, ввод невозможен, так? Нормально. Это меня устроит, большая часть команд всё равно не требует фидбэка.
Вариант с порядковым номером команды я рассматривал раньше. Видимо, это лучший вариант из возможных :)
Видимо, можно приступать к разработке утилиты... Спасибо за помощь!
Link to comment
Share on other sites

Quote:
если user.cfg держится в ОЗУ, то как часто идёт сохранение? Раз в секунду?

Вроде, запись на диск начинается мгновенно, сразу после каждого изменения.
Запись может занять разное время, в зависимости от размера этого файла. У меня она длится с полсекунды, т.к. у меня установлен HealthDB и раньше работал LootInfo, а почистить этот файл руки не доходят :) Во время записи, в игре наблюдается полусекундный лаг.
Link to comment
Share on other sites

можно воспользоваться утилитой tail, подключиться к mods.txt и парсить каждую новую строчку дописанную строчку на предмет команды программе. Этот способ позволяет избавить от полного чтения файла и совершенно негрузит систему, а также не мешает работать процессу который пишет в этот файл.

p.s. данная утилита также есть в пакете программ к windows server и возможно установка на любую ос windows =)

p.p.s. писал подобную программку для сервера одной онлайн рпг ;)

Link to comment
Share on other sites

Нет, пожалуй, я попробую воспользоваться user.cfg... А доступ для чтения другой программой точно есть во время игры, кто-нибудь проверял?

2 Ameno: У себя на Win7 ничего подобного не нашёл, да и не понадобится это. Вариант с перезаписью таблицы гораздо лучше, на мой взгляд. Команды могут быть очень нехилыми по размеру, и куча таких команд, записанная в лог, может покушать мегабайтики свободного места...

Спасибо всем за отклики! Дописываю проектик с учётом этих данных, скоро перейду к реализации...

Link to comment
Share on other sites

Quote:
Нет, пожалуй, я попробую воспользоваться user.cfg... А доступ для чтения другой программой точно есть во время игры, кто-нибудь проверял?

Блокнотом по крайней мере открывается :)
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use