В общем, как можно замутить годный инжект перемещения в Perfect World? Основная проблема в поиске высоты (Z) в точке по X и Y. Конечно, можно хукнуть D3D8, чтобы юзать для этого функции DirectX, но это будет довольно сложно. Наверняка в клиенте есть встроенная функция поиска высоты по (X;Y). Весьма интересный вопрос.
P.S. Ссылки на соседние темы с копрокодом на AutoIt кидать не стоит, я такой треш не разбираю D;
Последний раз редактировалось BritishColonist; 18.12.2011 в 12:12.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Повторяю (уточняю) ещё раз:
>> Разумеется, дело не в математических операциях.
Предположим, я нахожусь на коодринатах 0; 0 (длина и ширина, X и Y - по декартовой системе координат). Данной точке соответствует определённая высота поверхности ландшафта игрового мира (координата Z).
Понятно, что, просто зная координаты, невозможно определить высоту ландшафта по ним, нужно иметь информацию собственно о ландшафте. Она заложена в клиенте игры, а скорее всего именно в её DirectX-составляющей. И что-то мне подсказывает, что данный функционал DirectX всё-таки "обёрнут" функциями самого движка игры. Примерное имя, которое должна носить описанная функция получения высоты по длине и ширине (может, название даст конкретное понятие): GetGroundZAt(X,Y).
Я прошу не писать в теме тех, кто не в состоянии помочь, и уж тем более - просто представить вещи, о которых я говорю. На самом деле всё просто, но почему-то большинство из вас даёт мне оффсеты в структуре игрока (которая мною раскопана даже чуть глубже, чем тут, в соседнем разделе).
Последний раз редактировалось BritishColonist; 29.12.2011 в 16:09.
ааа теперь понял) где то я тут видел (давно) темку там кто то тоже хотел узнать высоту обьектов что бы сделать бегающего бота (хз для чего).. щас поищу
Добавлено через 10 минут
бида печаль, ненашол( эх а так хотел помочь(
________________
Почти забросил раздел Pw скажем спасибо TBX1n и серверу
Цитата:
Сообщение от TBX1n
Скука новый админ
Последний раз редактировалось Skuka.95; 29.12.2011 в 18:23.
Причина: Добавлено сообщение
Пора бы уже понять, что мне надо получать не высоту игрока, а высоту земли в определённой точке.
Ты уверен, что это в память пишется?
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Что в память пишется?
Надеюсь мне не нужно объяснять, что ландшафт - 3D-модель, имеющая определённое число вершин, рёбер, полигонов и т.д. Абсолютно точно существуют D3D-методы для проверки, пересекает ли луч плоскость, получения точки пересечения луча и плоскости и т.д. В частности, для перевода координат курсора в координаты игрового мира может использоваться непроецированный луч (луч, направленный как бы от нас "в глубь" экрана). Описанными выше D3D-методами возможно получить точку пересечения такого луча с ландшафтом, т.е., например, задать границы, на которые наш персонаж сможет перемещаться (чтобы не пересекал здания, деревья и т.д.).
Откуда вывод о том, что в PW это используется? Ну раз бегать можно мышью, щёлкая по земле, то абсолютно точно из координат курсора возможно получить все три координаты точки мира (X;Y;Z).
Следовательно, раз мне нужна только высота, то наверняка можно строить вертикально направленный вектор, определять точку его пересечения с полигонами ландшафта, вычислять разницу между началом вектора и этой точкой пересечения (для получения собственно высоты).
Откуда вывод, что и такая штука используется? Примеров много, вот лишь парочка из них:
1. В GM-панели Perfect World у администратора есть телепорт в любую точку на карте (Ctrl+ЛКМ, если не ошибаюсь). GM появляется ровно на земле (а баги с застряванием в зданиях или выложенных из камня дорогах в ГД подтверждают, что проверка идёт только относительно ландшафта, а здания не являются его частью).
2. Когда игрок прыгает с горы или полёта (высоты до и после прыжка явно должны быть разными), он приземляется ровно на земле (следовательно, высоту земли можно получить для любой точки игрового мира).
Надеюсь, достаточно понятно изложил суть темы. А сутью моего вопроса в данный момент является незнание, где конкретно лучше копать (всевозможных проблем много, например, при том же прыжке, насколько я помню, высота, на которой игрок должен приземлиться, пересчитывается много раз в секунду).
D3D-методы вряд ли подойдут, если только где есть годный мануал по данной теме (хукинг D3D8-методов), в чём я лично сомневаюсь.