Half-Life и Adrenaline Gamer форум

Всё об игре в Халф-Лайф и АГ
Текущее время: 28 мар 2024, 16:39

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Передвижение монстра
СообщениеДобавлено: 05 ноя 2015, 02:49 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
26 мар 2024, 21:42
Сообщения: 6864
Может нодов вообще нету? Попробуй как-то убедиться, вывода в код напихай.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Передвижение монстра
СообщениеДобавлено: 05 ноя 2015, 03:06 
Не в сети
Аватара пользователя
Зарегистрирован:
21 мар 2012, 13:21
Последнее посещение:
27 дек 2023, 02:51
Сообщения: 165
На карте ноды есть. А как проверить, используются ли они?

_________________
Портал Half-Life DeathMatch


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Передвижение монстра
СообщениеДобавлено: 05 ноя 2015, 04:18 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
26 мар 2024, 21:42
Сообщения: 6864
Надо дебажить BuildRoute и CheckLocalMove.
В BuildRoute есть три ветки в зависимости от результата CheckLocalMove, надо проверить какие ветки работают. Перемещение по нодам там в последней ветке. Так же есть вывод линии по которой монстр пойдет - можно по ним глянуть.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Передвижение монстра
СообщениеДобавлено: 05 ноя 2015, 06:35 
Не в сети
Аватара пользователя
Зарегистрирован:
21 мар 2012, 13:21
Последнее посещение:
27 дек 2023, 02:51
Сообщения: 165
После получения результата 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?!


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Передвижение монстра
СообщениеДобавлено: 05 ноя 2015, 08:24 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
26 мар 2024, 21:42
Сообщения: 6864
Ну, похоже что нодов нет. Предлагаю проверить значение WorldGraph.m_fGraphPresent.
И продебажить CGraph::FLoadGraph и CTestHull::BuildNodeGraph.
Ещё могу предположить, что файл с нодами пуст, т.е. он грузится, но нодов нет. Возможно имеет смысл удалить его и пересоздать.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Передвижение монстра
СообщениеДобавлено: 05 ноя 2015, 15:15 
Не в сети
Аватара пользователя
Зарегистрирован:
21 мар 2012, 13:21
Последнее посещение:
27 дек 2023, 02:51
Сообщения: 165
Что-то не похоже, чтобы функции 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


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Передвижение монстра
СообщениеДобавлено: 05 ноя 2015, 19:46 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
26 мар 2024, 21:42
Сообщения: 6864
ImperNik писал(а):
Can't init info_node
Не нашел такого текста.

Похоже тебе самому надо вызвать
Код:
WorldGraph.InitGraph();
И затем CTestHull::Spawn, она вызовет загрузку или создание нодов. Но этот вызов есть в CNodeEnt::Spawn, и ещё есть CNodeEnt::KeyValue, что указывает на то, что эта ентитя может загружаться с карты. Хотя я не вижу линковки класса ентити с её названием, как в HLSDK.
Пока больше нет времени. Позже гляну.
В принципе, можешь попробовать после WorldGraph.InitGraph вызвать сам
Код:
      CTestHull *pHull = CreateClassPtr((CTestHull *)NULL);
      pHull->Spawn( pev );
Делать это надо при старте уровня, может быть где-то в прекеше. Посмотри в HLSDK, там что-то было про ноды тоже.

Добавлено спустя 45 минут 39 секунд:
Вот код из HLSDK, используй его, должно подойти
Код:
void CWorld :: Precache( void )
{
...
   // init the WorldGraph.
   WorldGraph.InitGraph();

   // make sure the .NOD file is newer than the .BSP file.
   if ( !WorldGraph.CheckNODFile ( ( char * )STRING( gpGlobals->mapname ) ) )
   {// NOD file is not present, or is older than the BSP file.
      WorldGraph.AllocNodes ();
   }
   else
   {// Load the node graph for this level
      if ( !WorldGraph.FLoadGraph ( (char *)STRING( gpGlobals->mapname ) ) )
      {// couldn't load, so alloc and prepare to build a graph.
         ALERT ( at_console, "*Error opening .NOD file\n" );
         WorldGraph.AllocNodes ();
      }
      else
      {
         ALERT ( at_console, "\n*Graph Loaded!\n" );
      }
   }


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Передвижение монстра
СообщениеДобавлено: 05 ноя 2015, 21:40 
Не в сети
Аватара пользователя
Зарегистрирован:
21 мар 2012, 13:21
Последнее посещение:
27 дек 2023, 02:51
Сообщения: 165
Я его использовал, к сожалению не помогает. Точнее ситуация с ним немного странная.
Ноды могут загружаться только из файла. После загрузки нодов из файла они вроде как имеются, WorldGraph.m_fGraphPresent меняет значение с 0 на 1, но при этом монстры ведут себя как и прежде.

_________________
Портал Half-Life DeathMatch


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Передвижение монстра
СообщениеДобавлено: 05 ноя 2015, 22:16 
Не в сети
Site Admin
Зарегистрирован:
01 июн 2010, 01:27
Последнее посещение:
26 мар 2024, 21:42
Сообщения: 6864
Ну, задачу же решает - ноды появляются.
Дальше дебажить BuildRoute.


Вернуться к началу
 Профиль 
  
 Заголовок сообщения: Re: Передвижение монстра
СообщениеДобавлено: 08 ноя 2015, 00:24 
Не в сети
Аватара пользователя
Зарегистрирован:
21 мар 2012, 13:21
Последнее посещение:
27 дек 2023, 02:51
Сообщения: 165
Подебажил. Дошел до условия в 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
   //
   m_fGraphPresent = TRUE;
   m_fGraphPointersSet = FALSE;
Изменил FALSE на TRUE и заработало. Но что-то мне подсказывает, что способ не совсем правильный :)

Добавлено спустя 10 минут 27 секунд:
Изменил обратно TRUE на FALSE. В прекеше, после загрузки нодов из файла решил вручную вызвать функцию WorldGraph.FSetGraphPointers(), вроде работает.

_________________
Портал Half-Life DeathMatch


Вернуться к началу
 Профиль 
  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB