HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Оглушение монстров
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Engineer
Частый гость

Дата регистрации: Nov 2012
Проживает: SPb
Сообщений: 48
Возраст: 32

Рейтинг



Half-Life Оглушение монстров

При атаке игроком монстра, он некоторое время бездействует, как-бы оглушен.
Если монстр начинает атаковать игрока и игрок в это время атакует монстра, то он (монстр) прекратит атаку и будет бездействовать.

Помогите найти код, где это можно посмотреть и отключить. С HLSDK дружу не сильно, поэтому возникли трудности.

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

Старое сообщение 11-11-2015 22:14
- За что?
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



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


Всё, что сейчас вспонилось: анимации flinch проигрываются при появлении кондишенов bits_COND_*_DAMAGE. Копай в том направлении. Еще где-то должно выставляться время m_flNextAttack.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: half-life@conference.jabber.ru

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

Старое сообщение 11-11-2015 22:58
- За что?
Engineer
Частый гость

Дата регистрации: Nov 2012
Проживает: SPb
Сообщений: 48
Возраст: 32

Рейтинг



Покопался в коде, нашел следующее:

monsterstate.cpp:

C++ Source Code:
1
else if ( iConditions & bits_COND_LIGHT_DAMAGE )
2
{
3
  MakeIdealYaw ( m_vecEnemyLKP );
4
  m_IdealMonsterState = MONSTERSTATE_ALERT;
5
}
6
else if ( iConditions & bits_COND_HEAVY_DAMAGE )
7
{
8
  MakeIdealYaw ( m_vecEnemyLKP );
9
  m_IdealMonsterState = MONSTERSTATE_ALERT;
10
}



shedule.cpp
C++ Source Code:
1
if ( HasConditions(bits_COND_LIGHT_DAMAGE | bits_COND_HEAVY_DAMAGE) )
2
{
3
  if ( fabs( FlYawDiff() ) < (1.0 - m_flFieldOfView) * 60 ) // roughly in the correct direction
4
  {
5
    return GetScheduleOfType( SCHED_TAKE_COVER_FROM_ORIGIN );
6
  }
7
  else
8
  {
9
    return GetScheduleOfType( SCHED_ALERT_SMALL_FLINCH );
10
  }
11
}


Попробовал закомментить, чтобы проверить будут ли монстры продолжать атаку. Атаковать не прекращают.

Что-то мне подсказывает, что нужно копать в сторону defaultai.cpp и переменных Schedule_t

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

Старое сообщение 12-11-2015 10:59
- За что?
 XaeroX
Crystice Softworks

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

Рейтинг



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


AI_BaseNPC_Schedule.cpp, 1434-1437 - закомментируй эти строки.

C++ Source Code:
else if (HasConditions(bits_COND_LIGHT_DAMAGE) && !HasMemory( bits_MEMORY_FLINCHED) )
{
  return GetScheduleOfType( SCHED_SMALL_FLINCH );
}

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

Старое сообщение 12-11-2015 11:34
-
Engineer
Частый гость

Дата регистрации: Nov 2012
Проживает: SPb
Сообщений: 48
Возраст: 32

Рейтинг



Нужно было в переменных Schedule_t убирать биты bits_COND_LIGHT_DAMAGE и bits_COND_HEAVY_DAMAGE

На примере монстра houndeye нужно было поменять следующее в коде:

C++ Source Code:
1
Schedule_t	slHoundRangeAttack[] =
2
{
3
  {
4
    tlHoundYell1,
5
    ARRAYSIZE ( tlHoundYell1 ),
6
    [COLOR=red]bits_COND_LIGHT_DAMAGE	|
7
    bits_COND_HEAVY_DAMAGE,[/COLOR]
8
    0,
9
    "HoundRangeAttack1"
10
  },
11
  {
12
    tlHoundYell2,
13
    ARRAYSIZE ( tlHoundYell2 ),
14
    [COLOR=red]bits_COND_LIGHT_DAMAGE	|
15
    bits_COND_HEAVY_DAMAGE,[/COLOR]
16
    0,
17
    "HoundRangeAttack2"
18
  },
19
};

Меняем на:
C++ Source Code:
1
Schedule_t	slHoundRangeAttack[] =
2
{
3
  {
4
    tlHoundYell1,
5
    ARRAYSIZE ( tlHoundYell1 ),
6
    [COLOR=green]bits_COND_ENEMY_DEAD,[/COLOR]
7
    0,
8
    "HoundRangeAttack1"
9
  },
10
  {
11
    tlHoundYell2,
12
    ARRAYSIZE ( tlHoundYell2 ),
13
    [COLOR=green]bits_COND_ENEMY_DEAD,[/COLOR]
14
    0,
15
    "HoundRangeAttack2"
16
  },
17
};

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

Старое сообщение 12-11-2015 11:46
- За что?
 XaeroX
Crystice Softworks

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

Рейтинг



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


Да, флаги прерываний тоже имеет смысл поправить.

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

Старое сообщение 12-11-2015 11:58
-
Engineer
Частый гость

Дата регистрации: Nov 2012
Проживает: SPb
Сообщений: 48
Возраст: 32

Рейтинг



Цитата:
XaeroX писал:
AI_BaseNPC_Schedule.cpp, 1434-1437 - закомментируй эти строки.

C++ Source Code:
1
C++ Source Code:
2
else if (HasConditions(bits_COND_LIGHT_DAMAGE) && !HasMemory( bits_MEMORY_FLINCHED) )
3
{
4
  ____return GetScheduleOfType( SCHED_SMALL_FLINCH );
5
}


Этот вариант не работает
Без фрагов прерываний.

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

Старое сообщение 12-11-2015 11:59
- За что?
 XaeroX
Crystice Softworks

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

Рейтинг



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


Смотря что ты понимаешь под "работой".
Атаку монстр будет прерывать, факт. Но тратить время на дёрганье уже не будет.

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

Старое сообщение 12-11-2015 12:28
-
Engineer
Частый гость

Дата регистрации: Nov 2012
Проживает: SPb
Сообщений: 48
Возраст: 32

Рейтинг



Цитата:
XaeroX писал:
Смотря что ты понимаешь под "работой".
Атаку монстр будет прерывать, факт. Но тратить время на дёрганье уже не будет.


Да, виноват. Под "работой" я имел ввиду описанное мной в первом посте, т.е. прерывание атаки.

Атака останавливается - не работает.
Атака не останавливается - работает.

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

Старое сообщение 12-11-2015 13:01
- За что?
 XaeroX
Crystice Softworks

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

Рейтинг



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


Цитата:
Engineer писал:
он некоторое время бездействует, как-бы оглушен

Ну я вот про это подумал.

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

Старое сообщение 12-11-2015 13:05
-
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 04:36. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Оглушение монстров
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

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

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

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

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