Half-Life и Adrenaline Gamer форум http://aghl.ru/forum/ |
|
Передвижение монстра http://aghl.ru/forum/viewtopic.php?f=38&t=2310 |
Страница 2 из 3 |
Автор: | Lev [ 05 ноя 2015, 02:49 ] |
Заголовок сообщения: | Re: Передвижение монстра |
Может нодов вообще нету? Попробуй как-то убедиться, вывода в код напихай. |
Автор: | ImperNik [ 05 ноя 2015, 03:06 ] |
Заголовок сообщения: | Re: Передвижение монстра |
На карте ноды есть. А как проверить, используются ли они? |
Автор: | Lev [ 05 ноя 2015, 04:18 ] |
Заголовок сообщения: | Re: Передвижение монстра |
Надо дебажить BuildRoute и CheckLocalMove. В BuildRoute есть три ветки в зависимости от результата CheckLocalMove, надо проверить какие ветки работают. Перемещение по нодам там в последней ветке. Так же есть вывод линии по которой монстр пойдет - можно по ним глянуть. |
Автор: | ImperNik [ 05 ноя 2015, 06:35 ] |
Заголовок сообщения: | Re: Передвижение монстра |
После получения результата CheckLocalMove сделал вывод. В качестве цели указана координата (препятствий нет): Цитата: iLocalMove: 1, flDist: -24734989782764475761757471637504.000000 Graph not ready! Graph not ready! В качестве цели указана координата (С препятствиями): Цитата: iLocalMove: 0, flDist: 928.000000 Graph not ready! Graph not ready! iLocalMove: 0, flDist: 176.000000 Graph not ready! Graph not ready! iLocalMove: 0, flDist: 176.000000 Graph not ready! Graph not ready! func_wall Failed to move (1)! func_wall Failed to move (1)! ... В качестве цели Enemy указан игрок: Цитата: iLocalMove: 2, flDist: -24734989782764475761757471637504.000000 Stripped Также пробовал узнавать classname для pTarget. Если указаны координаты, то никакого pTarget нет. По идее, там должны быть info_node?! |
Автор: | Lev [ 05 ноя 2015, 08:24 ] |
Заголовок сообщения: | Re: Передвижение монстра |
Ну, похоже что нодов нет. Предлагаю проверить значение WorldGraph.m_fGraphPresent. И продебажить CGraph::FLoadGraph и CTestHull::BuildNodeGraph. Ещё могу предположить, что файл с нодами пуст, т.е. он грузится, но нодов нет. Возможно имеет смысл удалить его и пересоздать. |
Автор: | ImperNik [ 05 ноя 2015, 15:15 ] |
Заголовок сообщения: | Re: Передвижение монстра |
Что-то не похоже, чтобы функции FLoadGraph и BuildNodeGraph вообще вызывались. Где они должны вызываться? Или можно их вручную вызвать? В MoveToLocation и MoveToEnemy значение WorldGraph.m_fGraphPresent = 0 Добавлено спустя 39 минут 23 секунды: Еще я упустил из внимание следующие сообщения, при запуске сервера: Цитата: Can't init info_node
Can't init info_node Can't init info_node Can't init info_node Can't init info_node |
Автор: | Lev [ 05 ноя 2015, 19:46 ] |
Заголовок сообщения: | Re: Передвижение монстра |
ImperNik писал(а): Can't init info_node Не нашел такого текста.Похоже тебе самому надо вызвать Код: WorldGraph.InitGraph();И затем CTestHull::Spawn, она вызовет загрузку или создание нодов. Но этот вызов есть в CNodeEnt::Spawn, и ещё есть CNodeEnt::KeyValue, что указывает на то, что эта ентитя может загружаться с карты. Хотя я не вижу линковки класса ентити с её названием, как в HLSDK. Пока больше нет времени. Позже гляну. В принципе, можешь попробовать после WorldGraph.InitGraph вызвать сам Код: CTestHull *pHull = CreateClassPtr((CTestHull *)NULL);Делать это надо при старте уровня, может быть где-то в прекеше. Посмотри в HLSDK, там что-то было про ноды тоже. Добавлено спустя 45 минут 39 секунд: Вот код из HLSDK, используй его, должно подойти Код: void CWorld :: Precache( void ) |
Автор: | ImperNik [ 05 ноя 2015, 21:40 ] |
Заголовок сообщения: | Re: Передвижение монстра |
Я его использовал, к сожалению не помогает. Точнее ситуация с ним немного странная. Ноды могут загружаться только из файла. После загрузки нодов из файла они вроде как имеются, WorldGraph.m_fGraphPresent меняет значение с 0 на 1, но при этом монстры ведут себя как и прежде. |
Автор: | Lev [ 05 ноя 2015, 22:16 ] |
Заголовок сообщения: | Re: Передвижение монстра |
Ну, задачу же решает - ноды появляются. Дальше дебажить BuildRoute. |
Автор: | ImperNik [ 08 ноя 2015, 00:24 ] |
Заголовок сообщения: | Re: Передвижение монстра |
Подебажил. Дошел до условия в BuildNearestRoute: Код: if ( !WorldGraph.m_fGraphPresent || !WorldGraph.m_fGraphPointersSet )Стало интересно, почему WorldGraph.m_fGraphPointersSet = false. В функции FLoadGraph (nodes.cpp) нашел: Код: // Set the graph present flag, clear the pointers set flagИзменил FALSE на TRUE и заработало. Но что-то мне подсказывает, что способ не совсем правильный Добавлено спустя 10 минут 27 секунд: Изменил обратно TRUE на FALSE. В прекеше, после загрузки нодов из файла решил вручную вызвать функцию WorldGraph.FSetGraphPointers(), вроде работает. |
Страница 2 из 3 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |