Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
Добавление функций работы с памятью игры.
findmemorymask - поиск данных в памяти процесса по маске.
Используется для поиска в процессе неоднородного по своему значению набора данных. Таким типом данных может быть структура.
Что такое структура? Это набор байт, идущих один за другим в виде ленты в которые последовательно записаны некие данные конкретного объекта. В отличие от масива типы данных могут быть различными.
По русски:
Пример структуры описывающей моба (просто пример)....
Имя моба (отведено 20 байт)
ХП моба (4 байта)
Позиция моба X (4 байта)
Позиция моба Y (4 байта)
Позиция моба Z (4 байта)
Масштаб размера модели в клиенте (4 байта)
Прозрачность (4 байта)
...
Это все примерно. Для расструктуризации (определения какие данные и сколько байт занимают в структуре) необходим опыт работы с такими программами как Cheat Engine.
Вышеприведенная структура в общей сложности займет 46 байт идущих один за другим.
После того как мы поняли что собой представляет структура моба, список адресов всех структур мобов можно получить с помощью findmemorymask.
Пояснение:
Определим какие данные структуры имеют одинаковые значения у всех мобов такого типа...
Это будет
Имя моба (отведено 20 байт) ХП моба (4 байта)
... (4 байта)
... (4 байта)
... (4 байта) Масштаб размера модели в клиенте (4 байта) Прозрачность (4 байта)
Зная общие данные можно составить маску и по ней искать эти 46 байт. Маска нам нужна для того что бы искать именно по известным общим данным (они выделены зеленым) и не учитывать остальные данные.
Для поиска используется 2 масива char размером по 46 байт. Один - набор данных, другой маска.
Для данных нам надо заполнить массив char размером в 46 байт известными данными (Имя моба, ХП моба, Масштаб размера модели в клиенте, Прозрачность) в соответствием с индексами массива.
Для маски так же заполняем массив 46 байт. Инициализируем каждый байт в нем 0 или 1. (0 - данное значение не учитывается при поиске, 1 - учитывается). То есть номера в массивах где находятся искомые данные инициализируем 1, остальные (которые пропускаем 0).
Синтаксис: findmemorymask (-1, #poisk[0], 46, #adr[0], 0, #poiskmask[0], 100, prc);
Первый параметр: количество искомых адресов. при -1 искать все адреса.
Второй параметр: указатель на массив char в котором находятся искомые данные
Третий: количество искомых байт
четвертый: указатель на массив приемник адресов. int или double. Подробнее..
пятый: адрес старта поиска.
шестой: указатель на массив char - маску.
седьмой: процентное отношение (при котором можно считать поиск совпавшим. учитываются только байты учавствующие в поиске).
восьмой: указатель на процесс.
По поводу 7 параметра. Если поиск с 100 процентами не дал результата можно уменьшить точность до тех пор пока не будет найдено, а потом разбираться какие данные структуры не постоянные...
//
Так же можно указать не обязательным параметром финишный адрес поиска Указанный финишный адрес является адресом региона, в котором будет происходить поиск!
Его можно не указывать или поставить его в -1. Тогда будет без ограничений.
Возвращает количество найденных объектов.
///////////////////////////
freezememory - Записывает в память процесса по указанному адресу набор байт и замораживает их (то есть не дает игре изменить их). Работает как и writememory только с заморозкой.
Синтаксис: freezememory(0, #zamen[0], 16, adr, prc);
Параметр один - порядковый номер команды (как и в textout). По этому номеру можно потом разморозить эти данные.
параметр два - указатель на массив char, в котором записаны данные для замены и заморозки.
три - количество записываемых и замораживающихся байт
четыре - адресс в памяти
пять - процесс.
freememory(0);
Размораживат данные номеру команды в freezememory - (параметр 1).
Либо без параметра freememory();
В этом случае размораживает все что заморожено.
Кто знаком с поиском данных в процессах и Cheat Engine или Artmoney будет намного проще понять назначение этих функций.
//////////////////////////////
Сделал исправление в format - копирование масива char в string. Исправил копирование части массива. Подробнее в Копировать массив char в string
Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2013
Репутация: 3
На данный момент программа имеет только визуальное определение наличия моба или растояния к мобу. Теперь если довести это все до ума то можно будет сделать более легким ориентирование на месности и определять дальность расположения, досегаемость моба в игре.
Kibor
Отправлено: 19 Ноября, 2013 - 21:06:44
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
Можно, только под фрост пока этот метод не будет работать. Потом буду реанимировать эту функцию по защитой.
Barabachka
Отправлено: 19 Ноября, 2013 - 21:08:28
Участник
Покинул форум
Сообщений всего: 88
Дата рег-ции: Сент. 2013
Репутация: 3
Вот ктоб обьяснил как в L2 можно найти через Cheat Engine местоположение мобов в игре?
Kibor
Отправлено: 19 Ноября, 2013 - 21:22:42
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
Ну я писал что тут надо уметь разбираться...
shurupay
Отправлено: 10 Сентября, 2015 - 18:01:03
Прохожий
Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2014
Репутация: 0
Цитата:
Синтаксис: findmemorymask (-1, #poisk[0], 46, #adr[0], 0, #poiskmask[0], 100, prc);
Первый параметр: количество искомых адресов. при -1 искать все адреса.
Второй параметр: указатель на массив char в котором находятся искомые данные
Третий: количество искомых байт
четвертый: указатель на массив приемник адресов. int или double. Подробнее..
пятый: адрес старта поиска.
шестой: указатель на массив char - маску.
седьмой: процентное отношение (при котором можно считать поиск совпавшим. учитываются только байты учавствующие в поиске).
восьмой: указатель на процесс.
Условие:
1й параметр = 1;
2й параметр = массив байт «00 00 00 00 00 00 00 00 59 40 00 00 00 00 00 00 00 00 00»;
3й параметр = сответственно 19;
4й - понятно;
5й - 0;
6й - маска все 1;
7й - 100;
8й - тоже понятно;
Помогите пожалуйста по 2му параметру, не могу массив байт в char загнать, задайте направление куда двигатся.
Kibor
Отправлено: 10 Сентября, 2015 - 18:18:32
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2014
Репутация: 0
Спассибо!
Dansolo
Отправлено: 30 Июля, 2016 - 20:19:06
Прохожий
Покинул форум
Сообщений всего: 3
Дата рег-ции: Июль 2016
Репутация: 0
Можно ли получить по названию моба, его хп и координаты?
Kibor
Отправлено: 30 Июля, 2016 - 20:20:33
Эксперт
Просматривает форум
Сообщений всего: 8217
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
Можно.
Надо Найти его в памяти и по структуре считать что надо
Сначала надо найти с помощью CE и посмотреть как и что там.
Потом составить маску для поиска и искать Кибором.
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.