________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ] Мой старый БОТ
Обычно высота - (Z)
А (X,Y) - координаты на плоской поверхности.
так-то это так, но не в Perfect World
логично и правильно выводить координаты в виде X, Y, Z, однако в том же d_showpos высота (Z) стоит на втором месте. не понятно, в чём фишка.
фишка в том, что в мире 3D программ координаты X (длина) и Y (высота) находятся на плоскости, которая перед нами, а Z - это глубина. Так что с их точки зрения все правильно.
При наборе высоты в параметр height передается значение от 0 до 79, так же параметр Y(в данном случае высота) передается 0.
При отсутствии необходимости набрать высоту height=-1.0. так же в параметр Y может быть 0 а может быть и высота 0-790(тут не важно) .
Добавлено через 9 минут
Цитата:
Сообщение от N00bSa1b0t
данный код работает везде - в мире, в данжах - мой патибот замечательно бегает за игроком)
для следования за игроком можно использовать более простую функцию взятую вот [Ссылки могут видеть только зарегистрированные пользователи. ]
Код:
public void follow(int playerId)
{
int actionStruct = values.actionStructPointer;
int actionList = MemFunctions.MemReadInt(pr_processHandle, actionStruct + 0x30);
int followAction = MemFunctions.MemReadInt(pr_processHandle, actionList + 0x1C);
MemFunctions.MemWriteInt(pr_processHandle, followAction + 0x8, 0); //Set error = 0
MemFunctions.MemWriteInt(pr_processHandle, followAction + 0x20, playerId); //Set playerId to follow
//MemFunctions.MemWriteInt(pr_processHandle, followAction + 0x48, 0); //Set stopped following = 0
MemFunctions.MemWriteInt(pr_processHandle, actionStruct + 0xC, followAction); //Set new action at position 1
MemFunctions.MemWriteInt(pr_processHandle, actionStruct + 0x18, 1); //Set next action position to 1
MemFunctions.MemWriteInt(pr_processHandle, actionStruct + 0x14, followAction); //Set new action type follow as next action
}
Последний раз редактировалось imeninnik; 13.11.2011 в 14:03.
Причина: Добавлено сообщение
координаты как то не ведут в те места куда их задаешь движется безостановочно по направлениям причем при типе движения 2 подставляя скажем 1 на Х движется на запад неостанавливаясь, 1 на Y - на север, иногда персонаж, что удивительно становится плоским, то есть какой-то из параметров отвечает за преобразование сетки моделей о_О
Надеюсь в данном случае повторение это мать учения, а не заикания =).
При наборе высоты в параметр height передается значение от 0 до 79, так же параметр Y(в данном случае высота) передается 0.
При отсутствии необходимости набрать высоту height=-1.0. так же в параметр Y может быть 0 а может быть и высота 0-790(тут не важно) .
Все что отмечено красным в коде это уже исправленное.
Если кто не заметил, то координаты специально приведены к более привычному виду Х, Y, Z, координата Z записывается в поле для Y и наоборот. Ходить по ним все равно отказывается и тупо бегает безостановочно в одну сторону. Про набор высоты я в курсе, это единственная вещь которая почему-то работает как сь старыми значениями так и с новыми как по высоте так и по (в моем коде)Z. А в плоскости по координатам ходить не желает.
Перегнал на шарп, теперь проблема как и с инжектами- падение клиента со светофором. С++ код не выбрасывает клиент а вот С# рушит намертво в чем дело не понятно.
структура кода как в оригинале. Красным выделены поля отвечающие за начало действия/конец действия. Судя по всему поля байтовые, чтение из них целого выдает фигю первое поле содержит 7FC14400 или 7FC14401 в зависимости от того активно действи или нет: второе 1E0FF400 никогда не меняется. Первое проще по моему выставлять битовой маской. Зеленым выделены значения в полях, отвечающих за высоту они походу тоже типа byte. А при попытке записать выделенное желтым, т.е. указатель на следующее действие клиент падает со светофором.
Вот снимки состояний при движении и остановке: движение остановка
кстати код на следование за игроком не вылетает, однако и не следует, а на месте стоит дергается только, там похоже еще надо инициировать структуру движения, только клиент при этом падает.
Преобразование координат:
Хчел=400+Хигр/10
Хиг = (Хчел-400)*10;
Zчел=550+Zигр/10
Zиг = (Zчел-550)*10;
так что ооба не верно написали.
Разобрался. Не корректно работают функции записи в память в PWFrameWorke, которым пользовался поначалу, загоняют по адресам нули вместо значений отсюда и глюки с вылетами. Первое что сделал - написал сканер структуры чисто на функциях WinAPI. Второе все значения флагов начало/останов выставлял через цепочку ПРОЧИТАЛ-ВЫСТАВИЛ_БИТ_ЧЕРЕЗ_ЛОГИЧЕСКИЕ_И/ИЛИ-ЗАПИСАЛ. С высотой все несколько сложнее эти два ее параметра по смещению MoveAction+64h и MoveAction+6Сh отвечают за инициацию автопилота. При этом второе поле обнуляется если идет изменение высоты если изменение высоты закончено - значение равно 10000h. У первого значения младший бит выставляется в 1 если автопилот включен, в 0 если выключен. При включенном автопилоте координата Y(у меня Z) должна быть равна 0. Где то должны еще находиться поля, хранящие координаты точки маркера автопилота, которая задается, при клике по НИП/мобу в квесте или по карте через альт. Для того, чтобы персонаж сам взлетал при задании ему высоты вместо координаты Y в поле 6Ch надо записать 100h.
Последний раз редактировалось sin(alpha); 24.11.2011 в 22:58.
Раньше этот код отлично работал, а теперь игра сразу же вылетает при вызове функции
А поменять оффсеты не пробовали?
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
"$BASEADD" и "$BASEADD1C" как они здесь названы- стоят актуальные для руоффа, а вот на счёт значения "$OFFSET_CHECK_FLY" не уверен...хотя пробовал и старое значение 1580 и предполагаемое новое 1688 под другим названием State_Offset из offset retriever'a
У меня с обсуждаемой функцией такая проблема: вроде персонаж бегает нормально, но если подвинуть персонажа вручную (просто мышью или клавишами, а не через функцию), то он либо зависает, либо бежит на месте, либо после остановки вертится на одной точке вперёд-назад, как дурачок.
Никто не сталкивался?