HLFX.Ru Forum
Показать все 10 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Оглушение монстров (https://hlfx.ru/forum/showthread.php?threadid=4687)


Отправлено Engineer 11-11-2015 в 22:14:

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

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

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


Отправлено ~ X ~ 11-11-2015 в 22:58:

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

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


Отправлено Engineer 12-11-2015 в 10:59:

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

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


Отправлено XaeroX 12-11-2015 в 11:34:

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 );
}


Отправлено Engineer 12-11-2015 в 11:46:

Нужно было в переменных 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
};


Отправлено XaeroX 12-11-2015 в 11:58:

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


Отправлено Engineer 12-11-2015 в 11:59:

Цитата:
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
}


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


Отправлено XaeroX 12-11-2015 в 12:28:

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


Отправлено Engineer 12-11-2015 в 13:01:

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


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

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


Отправлено XaeroX 12-11-2015 в 13:05:

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

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


Временная зона GMT. Текущее время 22:26.
Показать все 10 сообщений этой темы на одной странице

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