Pithon, спасибо агромаднейшее за новые идеи. Пытался сам прикрутить своего бота к аське давно, не получилось - протокол джаббера оказался намного проще. Смысл был в том, чтобы не втыкать чужие плагины и библиотеки, а реализовать это в самом боте. Теперь живу с джаббером)
Есть к тебе вопрос - поясни алгоритм считывания чата, а то я туплю что то.
Может быть несколько вариантов:
1.Читать через заданное время все мессаги от ChatStart по ChatEnd, максимум 199, потом сравнить, что уже обрабатывалось, а что нет. Плюсы - простой алгоритм. Минусы - много обращений к клиенту, занимает сравнительно много времени(не так уж и много, визуально up не успеваю сказать, но не нравится все равно)
2.Следить за ячейкой Number of messages (+ deleted). Но название ей дал еще на старой ветке elitepvpers, не проследив за ее работой. Ячейка показывает количество всех пришедших мессаг, НО! при всех проставленных флажках в настройке общего чата. Неудобно каждый раз ставя бота, менять настройки чата. Да и симбиоз у нас с ним - если пошевелить мышкой, мой бот включает паузу в работе в активном окне и выключает ее через 10 сек неиспользования клавиатуры и мыши. А мне полностью включенный чат не нравится ну никак( Минусы - при изменении в настройках чата бот считывает совсем не то, что нужно.
3.Начинать чтение задом наперед, с последней мессаги. Сравнивать, была она обработана или нет. Плюсы - более быстрый алгоритм, меньше обращений к клиенту. Минусы - при отправке другими игроками одинаковых сообщений, что часто бывает при поисках пати или в спам боте, можно пропустить нужное...
4.Обнулять чат после каждого чтения. Плюсы - да вообще одни плюсы. Минусы - очень маленький шанс, но он есть, что во время стирания чата прийдет ПМ ГМ... Я в это не верю, но шанс есть )
5.Ставить метки на прочитанные мессаги. Или в ячейку +[I*$C+$0] , или в начало самого текста. Читать с последнего сообщения до метки. Минус - при приходе новой мессаги и их смещении можно поставить метку не на то место. Очень маленький шанс, но есть.
3.Начинать чтение задом наперед, с последней мессаги. Сравнивать, была она обработана или нет. Плюсы - более быстрый алгоритм, меньше обращений к клиенту. Минусы - при отправке другими игроками одинаковых сообщений, что часто бывает при поисках пати или в спам боте, можно пропустить нужное...
там есть ячейка с номером сообщения (не относительно начала списка, а с момента логона):
0xA60398 + (0x1C*N + 0x10) - вроде так
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
whoami, уточни мысль.
ChatStart=00A60398 - с какого адреса расположен массив адресов сообщений
ChatEnd=00A6039C - по какой адрес расположен массив адресов сообщений
ChatMax=00A603A0 - максимальное количество массива адресов, принимает фиксированные значения 30,48,75,115,175,265. 265 не знаю зачем, все равно максимальное количество будет 199.
ChatNumber=00A603A4 - количество ячеек массива адресов, максимальное значение 199 dec
ChatAll=00A6039C - количество сообщений, отображаемое в общем чате (старое название Number of messages (+ deleted))
ChatMini=00A603A0 - количество сообщений, отображаемое в малом чате
В массиве от ChatStart до ChatEnd выделяется по три ячейки dword для каждого сообщения, ChatStart +[I*$C+$0] - мусор, так и не понял, что туда заносится. ChatStart +[I*$C+$4] - цвет сообщения, ChatStart +[I*$C+$8] - адрес текста сообщения.
Итог:
ChatNumber нормально считает сообщения до 199 штук. После этого они начинают сдвигаться - самое первое удаляется при получении нового, а у этой ячейки так и остается значение 199 dec
ChatAll - считает только те значения, которые отображаются в окне чата. То есть, если отключен показ урона, то и считать это сообщение не будет, хотя в памяти оно есть. Соответственно и ChatMini.
Последний раз редактировалось sumikot; 19.10.2011 в 11:27.
sumikot, мне пока для моих целей хватает первого пункта.
Проблем со скоростью работы нет, т.к. вся работа с чатом у меня в отдельном потоке.
Обнуляя чат, можно что нить пропустить.
А записывать в клиента я стараюсь только по необходимости.
Более плотно хотел заняться после обновления.
Доставать лог урона.
Тоже встретился с проблемой дублирования сообщений.
Но на данном этапе решил интерпретировать серию одинаковых сообщений как одно.
т.к. по смыслу сильно они не отличаются
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
sumikot, ты про офф или про фришку какую-то?
В новых версиях (после обновы, с которой можно шифтить предметы) структура сообщения занимает 1C байт (т.е. 7 Int32). В поле со смещением +08 лежит адрес текста, в поле +10 лежит сквозной номер. Если в твоей версии размер структуры 0C, то этих данных скорее всего и нет.
Заранее предупреждаю: на оффе (до генезисной обновы) мой код анализа чата работает прекрасно. И лог дамага анализируется, и вход/выход из писа, и в точильном боте все работало, когда я там чат использовал.
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось whoami; 20.10.2011 в 10:03.
Python, спасибо. Думать над оптимизацией прийдется самому...
whoami, тоже спасибо) Про фришку. Адреса оффа вставил для наглядности. К сожалению, офф клиента сейчас нет, но теперь скачаю, хотя бы ради того, чтобы посмотреть на сие чудо. Структуры после каждого обновления вспухают как дрожжи. Тоже склонен выбрать 3й вариант , хоть сейчас и работает на первом...
Во-во! TBX1n давно в курсе что к чему.
А ведь именно он, помоему, мне объяснил что такое ВА, и дал ссылку на примеры использования.
Так что это всё вон... из за него.