PDA

Просмотр полной версии : Высота объектов


dark_avenger
29.09.2011, 09:42
Всем добрый день,
пишу бота на делфях, ну основное что хотел уже реализовал, но есть еще кое что, до чего пока не дошел... в общем мой бот сейчас торгует, и собирает инфу о ценах с других котов, но собирает он летая, ввиду того, что я не знаю где взять высоту объектов, а хотелось бы заставить бегать его по земле, написать ему нормальный А*, всетаки это было бы быстрее. Я распаковал карту высот из t2bk, но там только высота земли, а в городе ведь есть объекты, на которые чтобы взобраться надо знать их высоту. Не подскажите в каком направлении двигаться или же в каком файле клиента хранится эта инфа?
По сути нужна инфа о координатах объектов и их размеры.

N00bSa1b0t
29.09.2011, 15:10
а в городе ведь есть объекты,
эм, на какие объекты надо взбираться боту?
в том же згд вроде все обычно на земле стоят - по земле и бегай..разве нет?

dark_avenger
29.09.2011, 15:16
эм, на какие объекты надо взбираться боту?
в том же згд вроде все обычно на земле стоят - по земле и бегай..разве нет?

нет. простой пример - гд, где котлы стоят.... да и сам ГД кажись имеет высоту. т.с. бетон, не проверял...
да даже любая ступенька имеет высоту... а её необходимо отправлять серверу точно

BritishColonist
30.09.2011, 13:42
сомневаюсь, что где-то, кроме как в графическом движке, лежит информация о координатах зданий, о вершинах их поверхностей и т.д.
клиент и сам небось ничего не рассчитывает, а использует методы DirectX8 (D3DXVec3Unproject - строит непроектированный (как бы идущий в сторону от нас "вглубь" экрана) вектор по координатам X и Y (координаты курсора на экране). дальше можно получить координаты его пересечения с чем-либо путём других методов DirectX. но не будешь же кликать везде, чтобы получить все-все-все координаты каждой кочки и стенки, верно?).
как вариант - копаться в памяти DirectX-составляющей игры, но я без понятия, что там и как. да и если получить вершины, то потом придётся искать функции (а скорее всего писать вручную), определяющие, находится ли точка внутри меша (mesh, сама моделька), т.е. не выходит за ограничивающие вершины.
ещё вариант - сохранить чекпоинты, то бишь контрольные точки, между которыми бот будет циклически передвигаться. если нужен плавный бег (а не ботский "прямой" бег по самому ближайшему маршруту), то придётся ещё сделать функции, рассчитывающие координаты промежуточных чекпоинтов. вот такие вот дела. ;D

N00bSa1b0t
30.09.2011, 15:36
Ну это проблема имеет решение, недаром pwcats.info существуют. У них же боты бегают по гд и прочим злачным местечкам..

Я пока оог-котобота делаю, как сделаю - буду думать над передвижением.

whoami
30.09.2011, 17:17
N00bSa1b0t, возможно, там заранее описываются траектории, "заметающие" всё торговое пространство?

N00bSa1b0t
30.09.2011, 19:06
Может и так, кто их знает)

dark_avenger
30.09.2011, 23:39
я думаю джерри поступил проще и сделал инжект в клиент... т.е. собирает инфу через клиент )

дело в том что пути тут тоже не помогут, клиент формирует цепочку путей по пол секунды, расчитывая там и время и скорость! т.е. он говорит серверу каждые пол секунды, где должен находится (единственный вариант таких путей - с помощью инжекта записать путь в файл, но размер его будет ппц ппц, даже если брать только Z)... а сервер в свою очередь верит или нет ему... ну иногда корректирует (злаполучный B1, который откидывает перса). так вот если сервер не верит, то перс стоит на месте... получается что каждые пол секунды необходимо точно знать высоту. это не составляет проблем при бегани по данжам, и прочей земле, но вот в городах возникают сложности... ну а директX я в оог не собираюсь прикручивать ))) надо думать дальше... выход всегда есть!

N00bSa1b0t
01.10.2011, 01:14
я думаю джерри поступил проще и сделал инжект в клиент... т.е. собирает инфу через клиент )
Ты издеваешься?))
Он мне сам на пвлабе сообщал что через оог все делается, и даже скрин бота показывал. Так что никаких инжектов) Сам подумай, сколько у них ботов собирает инфу - сколько компов надо чтоб полноценных клиентов тянуть.




получается что каждые пол секунды необходимо точно знать высоту.
Так твой оог ж собирается точно бегать в какой-то области да?
Если гд - то там же Z везде одинаковый, кроме ступенек. А ступеньки возьми да считай сам.
В итоге минимум инфы хранить.

Т.е., если надо пробежать из точку А в точку Б, а посреди 2 поребрика - то запоминаешь Z координату, и координаты выступов.. Наверное как-то так надо делать.

Jok3r666
01.10.2011, 06:47
Мой бот сбора инфы из котов работает так, пишешь радиус (допустим 15), это примерно от середины дороги до её края в гд, сам прикидываешь область которую он будет захватывать и пошел создавать маршрут.

В итоге бот бежит по маршруту(по точкам), проверяет котов в заданом радиусе (когда прибежит на точку), что дает 90% уверенность что он не упрется в стену, я бы даже сказал 100%, только если какой нибудь муд.к не поставит кота на стене или еще в каком нибудь загашнике.

dark_avenger
01.10.2011, 09:58
Мой бот сбора инфы из котов работает так, пишешь радиус (допустим 15), это примерно от середины дороги до её края в гд, сам прикидываешь область которую он будет захватывать и пошел создавать маршрут.

В итоге бот бежит по маршруту(по точкам), проверяет котов в заданом радиусе (когда прибежит на точку), что дает 90% уверенность что он не упрется в стену, я бы даже сказал 100%, только если какой нибудь муд.к не поставит кота на стене или еще в каком нибудь загашнике.

ну по поводу путей, я все-таки придерживаюсь к А* по навигационной сетке, стены я ему в паинте нарисую за 15 минут, а дальше флудфил и поехали... основная проблема именно в универсальности определения высоты.

Ты издеваешься?))
Он мне сам на пвлабе сообщал что через оог все делается, и даже скрин бота показывал. Так что никаких инжектов) Сам подумай, сколько у них ботов собирает инфу - сколько компов надо чтоб полноценных клиентов тянуть.
предполагаю. бота я начал писать уже после продажи ПВлаба и соответственно там ни разу не был.

хотя мысль про рельсы кажется дошла до меня... скорее всего на этих рельсах как раз и фиксируется высота каждый пиксель, если она изменяется. но хочется универсальности, navimesh практичнее.

Так твой оог ж собирается точно бегать в какой-то области да?
Если гд - то там же Z везде одинаковый, кроме ступенек. А ступеньки возьми да считай сам.
В итоге минимум инфы хранить.

да даже в том же ГД высоты везде разные, есть к примеру горки - у них вообще высота идет по нарастающей и отрезок в пол секунды будет мал для пересечения этой горки.

Jok3r666
01.10.2011, 10:26
ну по поводу путей, я все-таки придерживаюсь к А* по навигационной сетке, стены я ему в паинте нарисую за 15 минут, а дальше флудфил и поехали... основная проблема именно в универсальности определения высоты.
вычислил всех котов во круг и получил с них высоту, косяк я вижу только со стенами и тарелкой, или просто не догоняю твоего алгоритма

dark_avenger
01.10.2011, 14:52
вычислил всех котов во круг и получил с них высоту, косяк я вижу только со стенами и тарелкой, или просто не догоняю твоего алгоритма
да нет, коты ведь стоят не на каждом пикселе, а их 1024*1024 (или для быстроты 512*512, как в потоке высот) в каждом высота может быть отличной от соседнего. со стенами как раз проблем нет, А* с этим прекрасно справляется, помечу как непроходимый объект, а тарелку можно выделить отдельным цветом, которым можно обозначить любые доступные летающие площадки

Jok3r666
01.10.2011, 15:23
А*
Я походу из леса, что за чудо такое A* можно в пм или ссылочку, гугл запрос не воспринемает.

dark_avenger
01.10.2011, 15:31
Это один из алгоритмов поиска пути, тот же алгоритм Дейкстры, только с эвристическим анализом длины пути
[Ссылки могут видеть только зарегистрированные и активированные пользователи] D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0_A*

Jok3r666
01.10.2011, 15:34
Да ты новый мир для меня открыл, а я уж о велосипеде задумался.

N00bSa1b0t
01.10.2011, 15:49
Мой бот сбора инфы из котов
У тебя он внутриигровой, там все проще)
Получил координаты кота ближайшего, прибавил к нему некий разброс (чтоб не прямо в него вбежать, а рядом встать) и иньекцию на движение, а клиент уже сам координаты считает)
У меня так пати-бот работает)


да даже в том же ГД высоты везде разные
Ага, только что глянул.. =(



а сервер в свою очередь верит или нет ему
А вообще - какая-то погрешность же может быть?)
Например выделили координаты кота ближайшего, построили к нему усредненную прямую и бежим по ней. так не пройдет? Я движением еще не занимался просто, я только котобота пишу) пакеты разобрал, остально все в красивой форме оформить.. ну и всякие фишка типа реконнекта сделать)

И во вторых, значит сервер то знает координаты объектов и прочих ступенек.. Может в эту сторону копнуть? Посмотреть на структуру сервера и подумать откуда там берутся объекты?

dark_avenger
01.10.2011, 16:04
А вообще - какая-то погрешность же может быть?)
Например выделили координаты кота ближайшего, построили к нему усредненную прямую и бежим по ней. так не пройдет?

может но очень не большая. нет так не получится ) если цель стоит выше чем мы, то траектория движения будет поднимающейся плавно вверх, а ведь площадка на которой стоит цель может быть далеко ) получится полет без крыльев до опредленного момента, а дальше сервер либо пришлет 0хB1, либо вообще проигнорирует такие координаты (имеется ввиду бег без включенного полета и прыжка)


Я движением еще не занимался просто, я только котобота пишу) пакеты разобрал, остально все в красивой форме оформить.. ну и всякие фишка типа реконнекта сделать)

изначально была такая же цель, потом втянулся )


И во вторых, значит сервер то знает координаты объектов и прочих ступенек.. Может в эту сторону копнуть? Посмотреть на структуру сервера и подумать откуда там берутся объекты?
сервер знает но не обо всех. конкретно не разбирал о чем он знает, но например сквозь ступеньки и двери бегать можно.

N00bSa1b0t
01.10.2011, 16:26
если цель стоит выше чем мы, то траектория движения будет поднимающейся плавно вверх
Ну если очень далеко - то конечно так не пройдет.
А если например ты бежишь по згд (по дорожке, она чуть выше), а кот стоит на земле.. получается разница в высоте совсем мелкая.


потом втянулся
Ну я тоже пишу свой OOGFramework =) просто заодно и котобот, чтобы одновременно и править/разрабатывать фреймворк и котобота) Теперь в программе пишу примерно так:
OOG = new OOG(server.Host, server.Port);
OOG.OnLogin += OnLogin;
OOG.Connect(txtLogin.Text, txtPassword.Text);

например сквозь ступеньки и двери бегать можно.
Кстати да.. Сам же в данжах через двери бегаю, забыл об этом))

jekans
01.10.2011, 17:37
Информация о высте предметах естесно лежит в моделях понять что и как можно скачав патчик который делает ресурсы в игре больше а там и при особом желании написать программу для определения высоты чтот примерно так:

перс бежит по дороге программа постоянно считывает индификаторы обьектов по ним ищет в папке нужные модели и считывает нужные параметры типа высоты ширины и.т.д вот так можно и сделать чтот типа умного обхода(облета и.т.д) обьектов.

Мутновато но не настолько все это сложно.

dark_avenger
01.10.2011, 19:11
Информация о высте предметах естесно лежит в моделях понять что и как можно скачав патчик который делает ресурсы в игре больше а там и при особом желании написать программу для определения высоты чтот примерно так:

перс бежит по дороге программа постоянно считывает индификаторы обьектов по ним ищет в папке нужные модели и считывает нужные параметры типа высоты ширины и.т.д вот так можно и сделать чтот типа умного обхода(облета и.т.д) обьектов.

Мутновато но не настолько все это сложно.

а ссылку можно? хотя подозреваю что тот патч просто меняет модели клиента... и привязка ко всем моделям клиента тоже не вариант... все данные необходимо заранее подготовить в один файлик. хотя что-то мне подсказывает что он уже есть в клиенте... кстати никто не сможет дать приглашение на pwdev.ru ?

Мегазадрот
22.10.2011, 00:15
Ты должен не высоту предметов смотреть а их форму ибо можешь с ума сойти если окажешься в какой-нибудь нише, под "тарелкой", под небесным городом или в данже.

Я тоже над сеткой проходимости мира работаю. Обход препятствий буду реализовывать по волновому алгоритму. Если сетка будет с шагом 1, то файлик получится размером 6144 * 780 * 9216 * sizeof(DWORD) = 177 гигов.

Сейчас у игры качается обновление.... дооолго...аж страшно! Как бы экзешник не обновили...


Поправочка: Экзешник другой ((((((((((((((((((((((((((((((((((((((((((((((((((

ukurenijboter
22.10.2011, 10:18
ыыы, я тоже написал котобота. Алгоритм движения у меня простой. Разбил все торговые зоны на квадраты, по 10*10м. И записал последовательность координат этих квадратов в виде строки с разделителями. Перс последовательно ищет котов в каждом квадрате. Далее движение я осуществляю без инжектов/пакетов(я ламерюга ога), а именно через клики по миникарте(да да), идея может показаться безумной, однако каждый пиксель на миникарте(увеличеной) занимает 1 м, этой точности вполне себе достаточно.(недостаток только в необходимости держать окно открытым)Необходимо знать только текущие координаты персонажа, конечные координаты, знать точку отсчета на миникарте, рассчитать куда нужно тыкнуть, тыкнуть и ждать когда конечные и текущие координаты "сравняются". Есть еще один вариант: нужно создать метку для движения, вычислить оффсет с координатами. Менять координаты на нужные, и производить инжект кнопки(двигаться к этой метке). В этом случае даже нет необходимости держать окно открытым.

Мегазадрот
25.10.2011, 00:08
У меня другое ноу хау. Я общитываю координаты точек пересечения с поверхностью/стенами/зданиями/препятствиями/НПС(!)/и т.п. через запуск функции самой игры.

Kitsune
25.10.2011, 13:38
Мегазадрот, и это должно быть пиндец как медленно, если построено на инжектах.

Мегазадрот
25.10.2011, 15:07
Да вообще капец!

Инжечу огромную функциенищу. Она в цикле исследует область 32х32х32 (координаты внутриигровые) пока не исследуются все ниши и закоулки. Алгоритм пока не оптимизировал - глупо прохожу все узлы сетки несколько раз и проверяю возможность прохода к соседним 6 узлам (это же пока черновик для исследований). Так на все уходит полминуты.

Раньше использовал функции из обработчика левого клика... но там неприятности с синхронизацией доступа к общими данными были (часто получалось что под землей можно было ходить). Сейчас использую "ни на какие общие данные не завязанную, функцию" - и надежнее и быстрее в 3-4 раза.

xoraxax
25.10.2011, 17:51
а собственно, зачем? оО

Мегазадрот
25.10.2011, 19:49
А у меня черта характера такая: делать все по умному, но слишком сложно и долго. Просто не нравится, что бот натыкается на препятствия, не может пешком пройти с одной части карты в другую и не обходит сильных мобов.