HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Как заставить NPC идти в нужном мне направлении ?
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
fire64
Житель форума

Дата регистрации: Apr 2007
Проживает: Москва
Сообщений: 2362
Возраст: 35

Рейтинг



Как заставить NPC идти в нужном мне направлении ?

C++ Source Code:
1
int GoToEntity( CBaseMonster *pNewEntity, CBaseEntity *pTargetEntity )
2
 
3
Vector vecDir = ( pTargetEntity->pev->origin - pNewEntity->pev->origin );
4
vecDir = vecDir.Normalize();
5
 
6
float flYaw = UTIL_VecToYaw( vecDir );
7
 
8
UTIL_MoveToOrigin( ENT(pNewEntity->pev), vecDir, flYaw, MOVE_NORMAL );
9
 
10
return 1;
11
}
12
 


Что не так в коде и как правильно ?

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей

Сообщить модератору | IP: Записан
Сообщение: 70487

Старое сообщение 20-01-2011 16:18
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33059
Нанёс повреждений: 392 ед.

Рейтинг



fire64 там не yaw, там dist.
Нахрена тебе yaw если у тебя уже есть вектор направления?
ну если чисто логически поразмыслить?
перед нормализацией найди VectorLength и подай его вместо yaw.

Добавлено 20-01-2011 в 22:27:

Да и учти, ходячий монстр не попрет вверх, только на одном уровне по Z.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 70488

Старое сообщение 20-01-2011 19:27
-
-=DrTressi=-
Мото-смертник

Группа: Неопытный
Дата регистрации: Aug 2010
Проживает: На Белом свете!
Сообщений: 1003
Возраст: 31

Рейтинг



Раз разговор о векторах - у меня вопросик.
Как сделать так чтобы func_door открывалась по диагонали? Т.е. сделать 4 дверки и чтоб они разъезжались в разные стороны по диагонали.

__________________
How interesting, just look at that!
© Scientist

Сообщить модератору | IP: Записан
Сообщение: 70494

Старое сообщение 21-01-2011 04:51
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35059
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


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

__________________

Сообщить модератору | IP: Записан
Сообщение: 70495

Старое сообщение 21-01-2011 04:58
-
fire64
Житель форума

Дата регистрации: Apr 2007
Проживает: Москва
Сообщений: 2362
Возраст: 35

Рейтинг



хм, NPC так и не ходит
Единственный пока что удавшийся вариант, через StartTask

code:
pNewEntity->m_hTargetEnt = pTargetEntity; Task_t *pTask = new Task_t(); pTask->iTask = TASK_WALK_TO_TARGET; pNewEntity->StartTask( pTask );


NPC вообще реально заставить выполнять нужные действия через внешний код, без Task_t, Shedule_t и так далее ?

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей

Сообщить модератору | IP: Записан
Сообщение: 70499

Старое сообщение 21-01-2011 09:26
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35059
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Подобными выкрутасами ты разрушаешь хрупкую систему Shedule/Task. Посмотри внимательно код scripted_sequece. Думаешь, они зря всё это нагородили, если бы можно было заставить монстра идти в нужную точку, вызвав пару функций?

Добавлено 21-01-2011 в 15:42:

В Volatile3D II да, можно одной луа-строкой заставить монстра идти, бежать и выполнять анимацию, но ради такого удобства мне пришлось внедрить в код ИИ целую систему, и не за один день.

__________________

Сообщить модератору | IP: Записан
Сообщение: 70500

Старое сообщение 21-01-2011 09:42
-
fire64
Житель форума

Дата регистрации: Apr 2007
Проживает: Москва
Сообщений: 2362
Возраст: 35

Рейтинг



Пришлось все же делать через TASK

C++ Source Code:
1
case TASK_RUN_TO_COORD:
2
case TASK_WALK_TO_COORD:
3
  {
4
    Activity newActivity;
5
 
6
  if ( pTask->iTask == TASK_WALK_TO_COORD )
7
    newActivity = ACT_WALK;
8
  else
9
    newActivity = ACT_RUN;
10
 
11
  if ( MoveToLocation( newActivity, 2, m_vecgocoord ) )
12
  {
13
    TaskComplete();
14
  }
15
  else
16
  {
17
    // no way to get there =(
18
    ALERT ( at_aiconsole, "Can't going to coord: %f, %f, %f\n", m_vecgocoord.x, m_vecgocoord.y, m_vecgocoord.z );
19
    TaskFail();
20
  }
21
  break;
22
}

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей

Сообщить модератору | IP: Записан
Сообщение: 70502

Старое сообщение 21-01-2011 11:22
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35059
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Ну, и Task радостно прервётся, как только монстр встретит препятствие или врага?

__________________

Сообщить модератору | IP: Записан
Сообщение: 70503

Старое сообщение 21-01-2011 11:25
-
fire64
Житель форума

Дата регистрации: Apr 2007
Проживает: Москва
Сообщений: 2362
Возраст: 35

Рейтинг



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

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей

Сообщить модератору | IP: Записан
Сообщение: 70504

Старое сообщение 21-01-2011 12:06
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35059
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


fire64
StartFrame емнип

__________________

Сообщить модератору | IP: Записан
Сообщение: 70505

Старое сообщение 21-01-2011 12:11
-
-=DrTressi=-
Мото-смертник

Группа: Неопытный
Дата регистрации: Aug 2010
Проживает: На Белом свете!
Сообщений: 1003
Возраст: 31

Рейтинг



Цитата:
XaeroX писал:
Точно так же, как в любом другом направлении - выставить нужный угол.
Ну и сам браш повернуть.


Но как? Там можно вращать Angle на 180 градусов либо Up либо Down

__________________
How interesting, just look at that!
© Scientist

Сообщить модератору | IP: Записан
Сообщение: 70506

Старое сообщение 21-01-2011 12:23
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35059
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Ну вот и вращай Angle на сколько тебе надо. Скажем, поставь 45 градусов.

__________________

Сообщить модератору | IP: Записан
Сообщение: 70507

Старое сообщение 21-01-2011 12:27
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33059
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
-=DrTressi=- писал:
Но как? Там можно вращать Angle на 180 градусов либо Up либо Down

не юзай angle. Юзай angles.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 70508

Старое сообщение 21-01-2011 12:33
-
-=DrTressi=-
Мото-смертник

Группа: Неопытный
Дата регистрации: Aug 2010
Проживает: На Белом свете!
Сообщений: 1003
Возраст: 31

Рейтинг



XaeroX и дверь отъедет на 45 градусов. А мне нужно чтобы она ещё и ввех отъехала.

Дядя Миша Это сарказм или что?

__________________
How interesting, just look at that!
© Scientist

Сообщить модератору | IP: Записан
Сообщение: 70511

Старое сообщение 21-01-2011 13:33
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13519
Возраст: 33

Рейтинг



-=DrTressi=-
>> А мне нужно чтобы она ещё и ввех отъехала.

>> чтоб они разъезжались в разные стороны по диагонали.

Издеваешься?


Задавай углы тогда для остальных осей. На крайняк сделай поездом.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | IP: Записан
Сообщение: 70512

Старое сообщение 21-01-2011 13:38
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 13:16. Новая тема    Ответить
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Как заставить NPC идти в нужном мне направлении ?
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024