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

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Беда с назначением анимации в методе Setactivity (https://hlfx.ru/forum/showthread.php?threadid=5902)


Отправлено Shadow762 24-10-2022 в 07:18:

Half-Life Беда с назначением IDLE анимации в методе Setactivity

Собственно, экспериментировал с барниками и грантами, добавил кастомные анимации (барникам - со спас12/сп5, грантам - пистолетные)

в методе
void <class>::SetActivity(Activity NewActivity)
у того же хгранта назначаются определенные анимки на некоторые ACTы, к примеру

C++ Source Code:
1
case ACT_RANGE_ATTACK1:
2
  if (FBitSet(pev->weapons, HGRUNT_9MMAR))
3
  {
4
    if (m_fStanding)
5
    {
6
      iSequence = LookupSequence("standing_mp5");
7
    }
8
  else
9
  {
10
    iSequence = LookupSequence("crouching_mp5");
11
  }
12
}

В игре оно работает...

но при case ACT_IDLE условие полностью игнорируется и все анимации в модели с параметром ACT_IDLE (в QC файле) проигрываются в приоритетном порядке.

Частично вылечил это путем удаления данного параметра из QC файла. Однако в ряде случаев возникает рандомная идл анимация. Но хотелось бы обойтись без подобного колхоза, устранив проблему чисто кодингом.

Если кто знает, подскажите пожалуйста, как исправить это?

__________________
Fight for Peace, Fight for Love


Отправлено Ku2zoff 24-10-2022 в 10:56:

Цитата:
Shadow762 писал:
при case ACT_IDLE условие полностью игнорируется и все анимации в модели с параметром ACT_IDLE (в QC файле) проигрываются в приоритетном порядке.

Хе-хе. Вот ещё кто-то на это наткнулся. Вот тебе пример, как назначать кастомные idle анимации:
C++ Source Code:
1
void CBarney::MonsterThink(void)
2
{
3
  pev->nextthink = gpGlobals->time + 0.1;
4
 
5
  RunAI();
6
 
7
  float flInterval = StudioFrameAdvance();
8
 
9
  if (m_MonsterState != MONSTERSTATE_SCRIPT && m_MonsterState != MONSTERSTATE_DEAD && m_Activity == ACT_IDLE && m_fSequenceFinished)
10
  {
11
    int iSequence;
12
 
13
    if (m_fSequenceLoops)
14
    {
15
      if (pev->weapons) iSequence = LookupActivity(ACT_IDLE_ANGRY);
16
      else iSequence = LookupActivity(m_Activity);
17
    }
18
    else
19
    {
20
      if (pev->weapons) iSequence = LookupActivityHeaviest(ACT_IDLE_ANGRY);
21
      else iSequence = LookupActivityHeaviest(m_Activity);
22
    }
23
 
24
    if (iSequence != ACTIVITY_NOT_AVAILABLE)
25
    {
26
      pev->sequence = iSequence;
27
      ResetSequenceInfo();
28
    }
29
  }
30
 
31
  DispatchAnimEvents(flInterval);
32
 
33
  if (!MovementIsComplete())
34
    Move(flInterval);
35
#if _DEBUG
36
  else
37
  {
38
    if (!TaskIsRunning() && !TaskIsComplete())
39
      ALERT(at_error, "Schedule stalled!!\n");
40
  }
41
#endif
42
}


Отправлено Shadow762 24-10-2022 в 11:18:

Цитата:
Ku2zoff писал:
Хе-хе. Вот ещё кто-то на это наткнулся

Стоп, то есть это редкий случай??
Ничоси)
Ku2zoff, спасибо, проверю ближе к вечеру

__________________
Fight for Peace, Fight for Love


Отправлено Ku2zoff 24-10-2022 в 11:54:

Цитата:
Shadow762 писал:
Стоп, то есть это редкий случай??

Idle анимации вызываются не только в SetActivity, но и в MonsterThink. Так что случай неочевидный, скажем так.


Отправлено Shadow762 24-10-2022 в 12:10:

Ku2zoff, нетривиально, однако
Но еще раз спасибо!
решилось сразу несколько проблем

__________________
Fight for Peace, Fight for Love


Отправлено Shadow762 26-10-2022 в 00:16:

Ku2zoff В общем проверил все детальльно, идлы порой глючат
назначенные работают в большинстве случаев, но хгранты иногда с пистолетного идла переключаются на автоматный
И наоборот тоже.

__________________
Fight for Peace, Fight for Love


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

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