HLFX.Ru Forum Страницы (200): « Первая ... « 195 196 197 198 [199] 200 »
Показать все 2999 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)


Отправлено Ku2zoff 25-09-2021 в 05:54:

hgrunt_2020 вот так. По этому тутору всё прекрасно делается. Рекомендую отключить клиентские пушки и завести кастомную мессагу вместо SVC_WEAPONANIM, чтобы нормально работало по сети в режиме наблюдателя.


Отправлено hgrunt_2020 26-09-2021 в 10:50:

опять я, и опять с вопросом

хотел чтоб в место заряженного выстрела гаусс сам пополнял боезапас, провозился долго, но чет толи я дурак, толи лыжи не едут, анимация spinup перестала проигрыватся, а spin проигрывается но после отпускания кнопки
вот что намудрил


void CGauss::SecondaryAttack()
{
if ( charge == 0 )
{

// spin up

SendWeaponAnim( GAUSS_SPINUP );
charge = 1;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5;
m_pPlayer->m_flStartCharge = gpGlobals->time;
m_pPlayer->m_flAmmoStartCharge = UTIL_WeaponTimeBase() + GetFullChargeTime();
}
else if (charge == 1)
{
if (m_flTimeWeaponIdle < UTIL_WeaponTimeBase())
{
SendWeaponAnim( GAUSS_SPIN );
}
}
else
{
if ( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] >= 100 )
{
m_fInAttack = 0;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0;
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1;
return;
}

if ( m_pPlayer->m_flStartCharge < gpGlobals->time - 10 )
{
m_fInAttack = 0;
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0;
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0;
SendWeaponAnim( GAUSS_IDLE );

// Player may have been killed and this weapon dropped, don't execute any more code after this!
return;
}
}

if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] >= URANIUM_MAX_CARRY )
return;

while( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] < URANIUM_MAX_CARRY && m_flRechargeTime < gpGlobals->time )
{
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]++;
m_flRechargeTime += 0.5f;
}
}


Отправлено FreeSlave 26-09-2021 в 12:10:

Думаю, многие замечали, что в какие-то моменты анимация деплоя оружия перестаёт играть при быстрой смене между пушками (на Q) - оружие мгновенно отображается на экране. Проявляется это как в сетевой, так и в одиночной игре. Кто-нибудь копал в эту сторону? Можно ли это стабильно побороть?

__________________
I'm on github
I'm on Open Build Service
I'm on opendesktop.org


Отправлено Ku2zoff 26-09-2021 в 14:35:

Цитата:
FreeSlave писал:
Можно ли это стабильно побороть?

Отключить клиентские пушки, я думаю.


Отправлено hgrunt_2020 30-09-2021 в 10:22:

Пытался сделать улучшение для пушек , но чет пошло не так

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

C++ Source Code:
1
class CItem74drum : public CItem
2
{
3
  void Spawn( void )
4
  {
5
    Precache( );
6
    SET_MODEL(ENT(pev), "models/w_74drum.mdl");
7
    CItem::Spawn( );
8
  }
9
  void Precache( void )
10
  {
11
    PRECACHE_MODEL ("models/w_74drum.mdl");
12
  }
13
  BOOL MyTouch( CBasePlayer *pPlayer )
14
  {
15
    if (m_iDrum == 0)
16
    {
17
      m_iDrum = 1;
18
    }
19
    return FALSE;
20
  }
21
};

__________________
новицек в с++


Отправлено Ku2zoff 30-09-2021 в 11:03:

hgrunt_2020 так тебе надо заводить переменные в коде пушки или игрока, а не в коде итема. В общих чертах:

C++ Source Code:
1
BOOL MyTouch( CBasePlayer *pPlayer )
2
{
3
  if (pPlayer->m_iDrum == 0)
4
  {
5
    if (pPlayer->pev->weapons & (1<<WEAPON_MYWEAPON))
6
    {
7
      pPlayer->m_iDrum = 1;
8
    }
9
  }
10
  return FALSE;
11
}
12
 
13
CMyWeapon::ItemPostFrame
14
{
15
  if (m_pPlayer->m_iDrum == 1)
16
    pev->body = нужная_бодигруппа;
17
}

Не забывай передавать бодю на клиент в эвентах и указывать в аргументе SendWeaponAnim, если работаешь не под ксашмодом.

Добавлено 30-09-2021 в 18:03:

Этот код годится, если хранить переменную в игроке. Ну мало ли, может у него тоже какие-то свойства меняются. А вот если хранить в пушке, что логичнее, тут немного сложнее:
C++ Source Code:
1
BOOL MyTouch( CBasePlayer *pPlayer )
2
{
3
  if (pPlayer->pev->weapons & (1<<WEAPON_MYWEAPON))
4
  {
5
    CMyWeapon *pGun = NULL;
6
 
7
    for ( i = 0 ; i < MAX_ITEM_TYPES ; i++ )
8
    {
9
      if ( pPlayer->m_rgpPlayerItems[ i ] )
10
      {
11
        CBasePlayerItem *pPlayerItem = pPlayer->m_rgpPlayerItems[ i ];
12
        while ( pPlayerItem )
13
        {
14
          pGun = (CMyWeapon*)(pPlayerItem->GetWeaponPtr());
15
        }
16
      }
17
    }
18
    if (pGun && pGun->m_iDrum == 0)
19
    {
20
      pGun->m_iDrum = 1;
21
    }
22
  }
23
  return FALSE;
24
}


Отправлено hgrunt_2020 30-09-2021 в 11:58:

Ku2zoff
items.cpp(361) : error C2065: 'i' : undeclared identifier
што с этим делать?

Добавлено 30-09-2021 в 14:58:

Ku2zoff
ты в for ( i = 0 ; i < MAX_ITEM_TYPES ; i++ ) забыл int, вот и выдовало у меня ошибку

__________________
новицек в с++


Отправлено Ku2zoff 30-09-2021 в 12:04:

Цитата:
hgrunt_2020 писал:
забыл int

Написал код на коленке, чисто для примера. Вот и упустил. Указатель на пушку правильно приходит?


Отправлено hgrunt_2020 30-09-2021 в 12:16:

Ku2zoff
здесь надо писать номер и ID пушки?
ибо у меня при подборе вылетает

__________________
новицек в с++


Отправлено Ku2zoff 30-09-2021 в 13:01:

Вместо WEAPON_MYWEAPON пишешь, например, WEAPON_MP5. Возможно, указатель получается невалидный. Поищи в коде, где из m_rgpPlayerItems ищутся CBasePlayerItem и сравнивай, в чём разница.


Отправлено Chyvachok 30-09-2021 в 14:15:

Тема с апгрейдами интересная, к примеру еще как вариант интересно бы сделать акимбо-пушки, но чтобы это было не отдельное оружие которое дается при подборе, а было апгрейдом существующей, а то без тутора Дяди Миши всего 32 слота на пушки, хотя я вроде смог осилить более-менее нормальные акимбо пушки. Из мелочей еще надо сделать какую-то анимацию применения подбора, просто холстер и деплой с новой боди группой если пушки в руках и игрока.

Кстати для акимбо полезная была бы фишка это блендинг анимаций, чтобы при стрельбе из левого пистолета не обрывалась анимация правого, и если правый не стреляет, то он проигрывал idle анимацию вне зависимости от левого пистолета.


Отправлено FreeSlave 10-10-2021 в 10:26:

Достаю в HUD_WeaponsPostThink состояние клиентской пушки через gEngfuncs.GetViewModel() и меняю там curstate.body. Но отображается изменение несколько позже. Можно ли как-то триггернуть перерисовку?

__________________
I'm on github
I'm on Open Build Service
I'm on opendesktop.org


Отправлено Ku2zoff 10-10-2021 в 16:42:

FreeSlave посылай с сервера в мессаге SVC_WEAPONANIM. Тогда бодя будет меняться не посреди кадра, а в начале. Но если надо менять налету, лучше используй Xash Weapon System с её бодями и скинами.

Добавлено 10-10-2021 в 23:42:

Ещё можешь попробовать менять бодю не в посттчинке, а в HUD_Frame. Теоретически, если операции, что делаются в ItemPreFrame запихать в HUD_Frame, а те, что в ItemPostFrame, оставить в HUD_WeaponsPostThink, это избавит систему оружий от глюков. Но ссылку на инфу о предиктинге можно получить только из HUD_PostRunCmd. Так что проще вообще нафиг вырезать клиентские пушки. От них один геморрой, а лаг в полсекунды при стрельбе не так уж заметен при игре по сети.


Отправлено FreeSlave 10-10-2021 в 18:01:

Ku2zoff SVC_WEAPONANIM же резетнет саму анимацию? Мне нужно менять боди без смены анимации, поэтому полез напрямую в ViewModel.

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

__________________
I'm on github
I'm on Open Build Service
I'm on opendesktop.org


Отправлено Дядя Миша 10-10-2021 в 18:03:

Помню я с этим дерьмом боролся на уровне движка. Вроде даже победил.

__________________
My Projects: download page

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


Временная зона GMT. Текущее время 11:50. Страницы (200): « Первая ... « 195 196 197 198 [199] 200 »
Показать все 2999 сообщений этой темы на одной странице

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