Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Опкоды, Формулы, Клиент

Важная информация

Опкоды, Формулы, Клиент Разбор и изучение взаимодействия клиента с сервером

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.03.2010, 01:31   #1
DeusModus
Администратор
 
Аватар для DeusModus
 
Регистрация: 07.03.2010
Адрес: Питер.
Сообщений: 69
Сказал(а) спасибо: 66
Поблагодарили 102 раз(а) в 15 сообщениях
Записей в дневнике: 12
DeusModus отключил(а) отображение уровня репутации
Восклицание Проход сквозь стены, коллизии, видимость целей, pathfinding, wmo

Внимание!
Орфография, пунктуация и терминология не сохранены! Я взял на себя смелость употреблять такие понятия как tile, pathfinding, waypoint в их первозданно-английском варианте, а не жутком транслите. Надеюсь, авторы не забросают за это помидорами.



mentat:
Неплохо бы со временем начать работать с WMO.
На WoWDev.org проводилось исследование этого формата, но сейчас это проект временно (или постоянно) сдох. Однако, удалось вырвать из кэша Google информацию с него по используемым форматам.

SLOM:
Сейчас в любом движке игры есть такое понятие как твердые тела.
Обьясню на примере Cosmos Creator который является движком 3d миров и игр на его основе:
  • Создаем плоскость и создаем над ней кубик.
  • Созаем гравитацию и нажимаем включение просчета, кубик тупо проходит сквозь плоскость.
  • Так же поступают наши боты.
  • Выделяем плоскость включам опцию земля.
  • Выделяем кубик вкл опцию твердое тело опред его как кубик(можно еще как сфера или меш но сфера он будет неправильно себя вести а меш напряжет процес).
  • Включаем и кубик падает на плоскость и ост на ней !
Так работает на официальном сервере.
Чтобы кубик обходил препятствие можно делать опережение расчета, то есть траектория падения (движение просчитывается далеко вперед ) и если есть препятствии- ищется кротчайший обход.
Тут есть проблемы. Как определить где проходимо а где нет ? И не будет ли это нагружать сервер частыми проверками на то есть впереди препятствие?
Гораздо легче и быстрей определить это по готовым точкам.

Deamon:
А если так. Понатыкать в вершины полигонов wmo waypoint`ов . На каждый такой waypoint вешать маршрут, типа куда из этой точки может попасть моб(в какой из соседних waypoints). Решается проблема прохода мобов через стены. Сразу же решается проблема проваливающихся мобов. Потому что z координату можно будет считать как разность z координат waypoint'ов. Пример такого провала можно наблюдать в Stormwind, при выходе из города. Там pet чуть-чуть уходит под гравий. Вариант получается и вашим и нашим.

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

Наверняка есть проблемы с определением вертикальной стены и горизонтального пола. Как вариант можно модифицировать какой-нить viewer wmo файлов и в нем руками удалять неверно взятые полигоны, которые на самом деле относятся к стене или потолку

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

SLOM:
Отличный ресурс, сегодня нашел там _http://xgm.ru/forum/forumdisplay.php?f=47
Программа позволяет редактировать файлы m2 (модели в WoW и их анимации).
И ваш любимый wmo
Цитата:

.:munche:. :
Нету в wmo waypoint`ов, мы(WoWcore) тоже долго ковыряли данные по m2 и wmo.
Обсчет этих данных будет дико убивать проц - 120%
Вот количество m2 которые нужно обсчитывать - те с которыми происходят коллизии:
73383 M2 на карте 0
100433 M2 на карте 1
Это без учёта, что в wmo тоже содержатся m2 объекты
Я уже молчу по instance которые целиком состоят из wmo... Здесь реально только обсчитывать m2 по сильно упрощенной модели и описать поверхности wmo системой waypoint`ов

SABROG:
Сколько ячеек на всей карте ? Сколько grid`ов в нее может уместиться ?

Не достаточно просто сделать waypoint'ы, монстры прекрасно определяют видимость целы. Т.е. ты не сможешь попасть spell`ом по монстру, если он за угол дома встанет. Да и потом все это упрощается. У нас ведь есть . Значит нам достаточно просчитывать только те M2 которые находятся в grid`е. Но и это ведь не все. Зачем просчитывать M2 с которыми не предполагается взаимодействие ? У каждого игрока и монстра есть область видимости. А также у нас есть траектория движения монстра, т.е. координата цели. Проведя мысленный луч к цели мы получить все координаты от монстра до игрока. Их будет не много, т.к. есть расстояние видимости, когда монстр должен будет оставить преследование. Значит проведя луч к цели мы ищем по каждой этой координате объект, который должен находится в этом месте. Список будет небольшим, т.к. у нас уже заранее будут загружены только те объекты, которые относятся к текущему и последующему grid`у, если идет "перевал" через границу. Остается только с определенным промежутком проводить подобную операцию, чтобы корректировать направление монстра. Т.е. если текущий заданный путь до цели короче, чем просчитали только что, то ничего не делать, если уже длиннее, то пересчитываем новый путь.

.:munche:. :
Я не знаю размеры ячеек на MaNGOS. Размеры в клиенте соответственно:
64х64 tile`ов максимально.
Сколько их реально прописано в соответствующем файле.
Размер tile 533.3(3).

Еще естественное замечание:
m2 на карте может стоять так, что будет находится на 4-х chunk`ах сразу - т.е. на границе, соответственно привязку к grid`ам,сеткам и прочим квадратам сделать без разбиения m2 на куски не получится... Либо делать для хранения такой информации простой массив с привязкой только к tile.


Спасибо Lelox за материалы.
продолжение следует...
DeusModus вне форума   Ответить с цитированием
6 пользователя(ей) сказали cпасибо:
Foks (09.03.2010), Hantet (23.03.2010), Konctantin (11.03.2010), Mayss (12.03.2010), unlucky (10.03.2010)
 

« Предыдущей темы нет | Старый метод авторизации: логи »

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[patch] Force Obedience (количество целей) PSZ Патчи на рассмотрении 0 05.07.2010 12:54
Нахождение пути: Раз и навсегда (pathfinding) DeusModus Прочая документация 2 28.03.2010 07:34


Текущее время: 15:39. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot