Всем добрый день,
пишу бота на делфях, ну основное что хотел уже реализовал, но есть еще кое что, до чего пока не дошел... в общем мой бот сейчас торгует, и собирает инфу о ценах с других котов, но собирает он летая, ввиду того, что я не знаю где взять высоту объектов, а хотелось бы заставить бегать его по земле, написать ему нормальный А*, всетаки это было бы быстрее. Я распаковал карту высот из t2bk, но там только высота земли, а в городе ведь есть объекты, на которые чтобы взобраться надо знать их высоту. Не подскажите в каком направлении двигаться или же в каком файле клиента хранится эта инфа?
По сути нужна инфа о координатах объектов и их размеры.
эм, на какие объекты надо взбираться боту?
в том же згд вроде все обычно на земле стоят - по земле и бегай..разве нет?
нет. простой пример - гд, где котлы стоят.... да и сам ГД кажись имеет высоту. т.с. бетон, не проверял...
да даже любая ступенька имеет высоту... а её необходимо отправлять серверу точно
сомневаюсь, что где-то, кроме как в графическом движке, лежит информация о координатах зданий, о вершинах их поверхностей и т.д.
клиент и сам небось ничего не рассчитывает, а использует методы DirectX8 (D3DXVec3Unproject - строит непроектированный (как бы идущий в сторону от нас "вглубь" экрана) вектор по координатам X и Y (координаты курсора на экране). дальше можно получить координаты его пересечения с чем-либо путём других методов DirectX. но не будешь же кликать везде, чтобы получить все-все-все координаты каждой кочки и стенки, верно?).
как вариант - копаться в памяти DirectX-составляющей игры, но я без понятия, что там и как. да и если получить вершины, то потом придётся искать функции (а скорее всего писать вручную), определяющие, находится ли точка внутри меша (mesh, сама моделька), т.е. не выходит за ограничивающие вершины.
ещё вариант - сохранить чекпоинты, то бишь контрольные точки, между которыми бот будет циклически передвигаться. если нужен плавный бег (а не ботский "прямой" бег по самому ближайшему маршруту), то придётся ещё сделать функции, рассчитывающие координаты промежуточных чекпоинтов. вот такие вот дела. ;D
я думаю джерри поступил проще и сделал инжект в клиент... т.е. собирает инфу через клиент )
дело в том что пути тут тоже не помогут, клиент формирует цепочку путей по пол секунды, расчитывая там и время и скорость! т.е. он говорит серверу каждые пол секунды, где должен находится (единственный вариант таких путей - с помощью инжекта записать путь в файл, но размер его будет ппц ппц, даже если брать только Z)... а сервер в свою очередь верит или нет ему... ну иногда корректирует (злаполучный B1, который откидывает перса). так вот если сервер не верит, то перс стоит на месте... получается что каждые пол секунды необходимо точно знать высоту. это не составляет проблем при бегани по данжам, и прочей земле, но вот в городах возникают сложности... ну а директX я в оог не собираюсь прикручивать ))) надо думать дальше... выход всегда есть!
Последний раз редактировалось dark_avenger; 30.09.2011 в 23:42.
я думаю джерри поступил проще и сделал инжект в клиент... т.е. собирает инфу через клиент )
Ты издеваешься?))
Он мне сам на пвлабе сообщал что через оог все делается, и даже скрин бота показывал. Так что никаких инжектов) Сам подумай, сколько у них ботов собирает инфу - сколько компов надо чтоб полноценных клиентов тянуть.
Цитата:
Сообщение от dark_avenger
получается что каждые пол секунды необходимо точно знать высоту.
Так твой оог ж собирается точно бегать в какой-то области да?
Если гд - то там же Z везде одинаковый, кроме ступенек. А ступеньки возьми да считай сам.
В итоге минимум инфы хранить.
Т.е., если надо пробежать из точку А в точку Б, а посреди 2 поребрика - то запоминаешь Z координату, и координаты выступов.. Наверное как-то так надо делать.
Мой бот сбора инфы из котов работает так, пишешь радиус (допустим 15), это примерно от середины дороги до её края в гд, сам прикидываешь область которую он будет захватывать и пошел создавать маршрут.
В итоге бот бежит по маршруту(по точкам), проверяет котов в заданом радиусе (когда прибежит на точку), что дает 90% уверенность что он не упрется в стену, я бы даже сказал 100%, только если какой нибудь муд.к не поставит кота на стене или еще в каком нибудь загашнике.
Мой бот сбора инфы из котов работает так, пишешь радиус (допустим 15), это примерно от середины дороги до её края в гд, сам прикидываешь область которую он будет захватывать и пошел создавать маршрут.
В итоге бот бежит по маршруту(по точкам), проверяет котов в заданом радиусе (когда прибежит на точку), что дает 90% уверенность что он не упрется в стену, я бы даже сказал 100%, только если какой нибудь муд.к не поставит кота на стене или еще в каком нибудь загашнике.
ну по поводу путей, я все-таки придерживаюсь к А* по навигационной сетке, стены я ему в паинте нарисую за 15 минут, а дальше флудфил и поехали... основная проблема именно в универсальности определения высоты.
Цитата:
Сообщение от N00bSa1b0t
Ты издеваешься?))
Он мне сам на пвлабе сообщал что через оог все делается, и даже скрин бота показывал. Так что никаких инжектов) Сам подумай, сколько у них ботов собирает инфу - сколько компов надо чтоб полноценных клиентов тянуть.
предполагаю. бота я начал писать уже после продажи ПВлаба и соответственно там ни разу не был.
хотя мысль про рельсы кажется дошла до меня... скорее всего на этих рельсах как раз и фиксируется высота каждый пиксель, если она изменяется. но хочется универсальности, navimesh практичнее.
Цитата:
Сообщение от N00bSa1b0t
Так твой оог ж собирается точно бегать в какой-то области да?
Если гд - то там же Z везде одинаковый, кроме ступенек. А ступеньки возьми да считай сам.
В итоге минимум инфы хранить.
да даже в том же ГД высоты везде разные, есть к примеру горки - у них вообще высота идет по нарастающей и отрезок в пол секунды будет мал для пересечения этой горки.
ну по поводу путей, я все-таки придерживаюсь к А* по навигационной сетке, стены я ему в паинте нарисую за 15 минут, а дальше флудфил и поехали... основная проблема именно в универсальности определения высоты.
вычислил всех котов во круг и получил с них высоту, косяк я вижу только со стенами и тарелкой, или просто не догоняю твоего алгоритма
вычислил всех котов во круг и получил с них высоту, косяк я вижу только со стенами и тарелкой, или просто не догоняю твоего алгоритма
да нет, коты ведь стоят не на каждом пикселе, а их 1024*1024 (или для быстроты 512*512, как в потоке высот) в каждом высота может быть отличной от соседнего. со стенами как раз проблем нет, А* с этим прекрасно справляется, помечу как непроходимый объект, а тарелку можно выделить отдельным цветом, которым можно обозначить любые доступные летающие площадки
Это один из алгоритмов поиска пути, тот же алгоритм Дейкстры, только с эвристическим анализом длины пути
[Ссылки могут видеть только зарегистрированные пользователи. ]