Half-Life и Adrenaline Gamer форум http://aghl.ru/forum/ |
|
Передвижение монстра http://aghl.ru/forum/viewtopic.php?f=38&t=2310 |
Страница 1 из 3 |
Автор: | ImperNik [ 04 ноя 2015, 05:33 ] |
Заголовок сообщения: | Передвижение монстра |
Недавно разбирался с metamod плагином Monster plugin. Возникла необходимость заспавнить монстра в одной локации и сделать так, чтобы он двигался к другой. Создание монстра делается так: Код: monsters[monster_index].pMonster = CreateClassPtr((CMZombie *)NULL); Что мне добавить, чтобы монстр двигался к другой локации? И если я правильно понимаю, то, чтобы монстр передвигался, по карте должны быть раскиданы info_node |
Автор: | ImperNik [ 04 ноя 2015, 17:08 ] |
Заголовок сообщения: | Re: Передвижение монстра |
Испробовал несколько вариантов: Код: monsters[monster_index].pMonster->MoveExecute(monster_pent, Vector(0,183,65), 20); Код: UTIL_MoveToOrigin(monster_pent, Vector(0,183,65), 20, MOVE_NORMAL);Ничего не сработало. Сработал только вариант с Task: Код: edict_t *pPlayer = INDEXENT(1); // Player #1Но отличие здесь в том, что задаётся entity, а не координата. Добавлено спустя 1 час 1 минуту 2 секунды: Как оказалось, ничего сложного в этом не было. И зря я лез в Tasks. Двигаться к координате: Код: monsters[monster_index].pMonster->MoveToLocation(ACT_RUN, 2, Vector(0,183,65)); Двигаться к игроку: Код: monsters[monster_index].pMonster->m_hTargetEnt = pPlayer; Возникла другая проблема. NPC всегда идёт, а нужно, чтобы он бежал. Даже если в Activity передано ACT_RUN. |
Автор: | Lev [ 04 ноя 2015, 20:20 ] |
Заголовок сообщения: | Re: Передвижение монстра |
А передвигаться далеко? |
Автор: | ImperNik [ 04 ноя 2015, 20:23 ] |
Заголовок сообщения: | Re: Передвижение монстра |
Да, любое расстояние. На тестовой карте это около 2000 юнитов. Вдобавок нужно чтобы монстр мог преодолевать препятствия, сейчас он упирается в стенку и начинается "func_wall Failed to move (1)!" Добавлено спустя 5 минут 13 секунд: Еще я сделал вывод сообщений в консоль в функции CMBaseMonster::MoveExecute, чтобы проверить значения переменных. Если монстр не видит игрока, то он идёт: Цитата: dist 4.006655 (m_flGroundSpeed: 40.066399, pev->framerate: 1.000000, flInterval: 0.100000) Как только монстр увидел игрока, он начинает нападать и бежать: Цитата: dist 30.400357 (m_flGroundSpeed: 304.002411, pev->framerate: 1.000000, flInterval: 0.100000) Меняется значение m_flGroundSpeed, а где оно меняется я так и не понял. Интересно было бы посмотреть на этот код, ведь наверняка там кроется ответ на вопрос "Как сделать, чтобы NPC бежал?". |
Автор: | Lev [ 04 ноя 2015, 20:35 ] |
Заголовок сообщения: | Re: Передвижение монстра |
Похоже, что они бегают только по прямой, а если ноды близко, то не успевают разогнаться: Код: void CMController :: SetActivity ( Activity NewActivity ) Добавлено спустя 3 минуты 41 секунду: ЗЫ Но это если контроллер участвует в движении. Не разбирался досконально как там всё работает. |
Автор: | ImperNik [ 04 ноя 2015, 20:48 ] |
Заголовок сообщения: | Re: Передвижение монстра |
Ноды они почему-то даже не замечают, на каком расстоянии бы они не были. Может нужно как-то по другому передвигать NPC? Всё равно бежать не хотят... А что помимо контроллера может участвовать в движении? |
Автор: | Lev [ 04 ноя 2015, 21:05 ] |
Заголовок сообщения: | Re: Передвижение монстра |
CMBaseMonster::Move и таски есть ещё. Они, конечно, могут просто быть завязаны и вместе использоваться, надо копаться. Проверь, что в m_IdealActivity и m_movementActivity, может сбрасывается на ACT_WALK. Какой тип монстра у тебя используется? |
Автор: | ImperNik [ 04 ноя 2015, 21:14 ] |
Заголовок сообщения: | Re: Передвижение монстра |
Да, действительно, m_movementActivity сбрасывается на ACT_WALK, когда монстр увидел игрока, то меняется на ACT_RUN. Использую монстра hgrunt, пробовал разных - islave, zombie. Добавлено спустя 22 минуты 15 секунд: Решение проблемы нашел в следующем: В AI_BaseNPC_Schedule.cpp (в hlsdk он sheldule.cpp) поменял местами ACT_WALK и ACT_RUN: Код: case TASK_WALK_PATH: Добавлено спустя 2 минуты 46 секунд: Осталась проблема с нодами. Не хотят двигаться по нодам, если игрок стоит за стеной, то NPC упирается в стену и всё. Добавлено спустя 38 минут 32 секунды: Проблему вроде решил заменой Target на Enemy. Буду тестить. Код: edict_t *pPlayer = INDEXENT(1); |
Автор: | Lev [ 04 ноя 2015, 23:00 ] |
Заголовок сообщения: | Re: Передвижение монстра |
А при движении на точку они по прямой бегут? Что если изогнутый коридор - бегут в стену? |
Автор: | ImperNik [ 05 ноя 2015, 00:23 ] |
Заголовок сообщения: | Re: Передвижение монстра |
По прямой. Если изогнутый коридор, то бегут в стену. |
Страница 1 из 3 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |