Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Новичкам

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

Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.04.2011, 17:32   #1
BloodWarrior
Ученый
 
Аватар для BloodWarrior
 
Регистрация: 08.05.2010
Адрес: Новокузнецк
Сообщений: 141
Сказал(а) спасибо: 32
Поблагодарили 21 раз(а) в 9 сообщениях
BloodWarrior На верном пути
По умолчанию Вопрос по LOS

Пытался тут прикрутить конфьюз мувмент генератор к ммапам.
В принципе все сделал и сделал достаточно таки более менее в работоспособном варианте до определенного момента.

координаты xyz

Берутся великим и ужасным рандомом.
i_nextMove = urand(1,MAX_CONF_WAYPOINTS);
где MAX_CONF_WAYPOINTS - 24

И все выглядит хорошо, там стоит скажем тележка, сгенерировалась координата за ней, овца или ослепленыш ее граматно оббежит.

Но рандом суров и имеет свойство получать координату точки внутри объекта порой. Особенно это заметно в зданиях как таковых.
Без мувмап все выглядело совсем страшно, в любом вмо только использовал - словил провал.
С мувмапами при некорректных координатах существо пытается просчитать путь, начинает панически дергаца и бегать и таки порой попадает в неудобное положение, происходит микротелепорт да много каких еще конфузов.

Вот возник вопрос, поскольку сам лобстер еще тот.

const float x = i_waypoints[i_nextMove][0];
const float y = i_waypoints[i_nextMove][1];
const float z = i_waypoints[i_nextMove][2];

Как к вот получаемому по сути значению xyz выше прикрутить проверку на лос?

Ну по сути по функции х = полученному рандомному след позицию, если оная в зоне видимости игрока?
__________________
MZero - z1686 SDZero - z0354 - 17.05.2011
BloodWarrior вне форума   Ответить с цитированием
Старый 22.04.2011, 19:25   #2
SilverIce
MaNGOS Dev
 
Регистрация: 14.03.2010
Сообщений: 38
Сказал(а) спасибо: 23
Поблагодарили 49 раз(а) в 16 сообщениях
SilverIce Скоро придёт к известности
По умолчанию

т.е. вы хотите сначала проверить на видимость/LoS и затем генерировать путь?
WorldObject::IsWithinLOS используйте или чтото подобное:
Код:
bool IsWithinLOS(uint32 mapId, float x, float y, float z, float ox, float oy, float oz)
{
    return VMAP::VMapFactory::createOrGetVMapManager()->isInLineOfSight(mapId, x, y, z+2.0f, ox, oy, oz+2.0f);
}
разве mmaps при генерации пути не возвращает нормальных путей без захода в объекты? по хорошему должно быть так и проверка на LoS не нужна

Последний раз редактировалось SilverIce; 22.04.2011 в 20:32.
SilverIce вне форума   Ответить с цитированием
Старый 22.04.2011, 21:33   #3
BloodWarrior
Ученый
 
Аватар для BloodWarrior
 
Регистрация: 08.05.2010
Адрес: Новокузнецк
Сообщений: 141
Сказал(а) спасибо: 32
Поблагодарили 21 раз(а) в 9 сообщениях
BloodWarrior На верном пути
По умолчанию

До того как прочитал, уже использовал такой вот моментик для корректировки:
Спасибо syooo
Код:
        unit.UpdateAllowedPositionZ(i_waypoints[idx][0],i_waypoints[idx][1],z);
        i_waypoints[idx][2] =  z;
+        if(!unit.IsWithinLOS(i_waypoints[idx][0],i_waypoints[idx][1],i_waypoints[idx][2]))
+                {
+                    i_waypoints[idx][0] = idx > 0 ? i_waypoints[idx-1][0] : x;
+                    i_waypoints[idx][1] = idx > 0 ? i_waypoints[idx-1][1] : y;
+                    i_waypoints[idx][2] = idx > 0 ? i_waypoints[idx-1][2] : z;
+                }
    }

    unit.StopMoving();
    unit.addUnitState(UNIT_STAT_CONFUSED|UNIT_STAT_CONFUSED_MOVE);
Ммапс то строит нормальные пути, но исходя из поданных координат.
Точку следующего перемещения в конфьюзе генерирует рандом хуз по рандому берет от 1 до 24 в каждый ну и использует полученные данные.

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

В результате сконфуженный сильно мечется пытаясь пройти по построенным мтайлам до точки которая в них не укладывается, со сбросами и откатами назад XD
__________________
MZero - z1686 SDZero - z0354 - 17.05.2011

Последний раз редактировалось BloodWarrior; 22.04.2011 в 21:47.
BloodWarrior вне форума   Ответить с цитированием
Старый 22.04.2011, 22:46   #4
SilverIce
MaNGOS Dev
 
Регистрация: 14.03.2010
Сообщений: 38
Сказал(а) спасибо: 23
Поблагодарили 49 раз(а) в 16 сообщениях
SilverIce Скоро придёт к известности
По умолчанию

как еще один никудышний вариант: посмотрите код блинка - из точки А в Б испускается луч и возвращается точка С пересечения с объектами или конечная(Б). Из А в С путь и стойте.

Скорее всего должен быть другой способ построения таких путей(ведь конечная точка по сути неизвестна): mmap возвращает возможные варианты перемещений внутри одного полигона, некий объект-агент выбирает один из них, и т.д. до "победного конца"
SilverIce вне форума   Ответить с цитированием
Старый 23.04.2011, 06:03   #5
BloodWarrior
Ученый
 
Аватар для BloodWarrior
 
Регистрация: 08.05.2010
Адрес: Новокузнецк
Сообщений: 141
Сказал(а) спасибо: 32
Поблагодарили 21 раз(а) в 9 сообщениях
BloodWarrior На верном пути
По умолчанию

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

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

SilverIce в конфьюз мув гене конечная точка какраз и известна. Ну вернее следующая точка, для построения пути до нее и использую пф.

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

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

Приведенный код более менее стабилизирует ситуевину, хотя провалы таки под поверхности вмо ли или вообще под террейн через дерево скажем которое слишком близко к сданию таки еще имеются, но они редки и в основном все путем.
__________________
MZero - z1686 SDZero - z0354 - 17.05.2011

Последний раз редактировалось BloodWarrior; 23.04.2011 в 12:15.
BloodWarrior вне форума   Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по титулам Limpnau Новичкам 1 03.12.2010 21:21
Вопрос по git impylse Новичкам 2 23.09.2010 07:58
Вопрос по DBCfmt.h sokmax Корзина 13 26.08.2010 21:16
Вопрос по SQL. Omg Новичкам 24 21.07.2010 23:29
вопрос sparky Новичкам 4 19.03.2010 16:28


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


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