hgrunt_2020 вот так. По этому тутору всё прекрасно делается. Рекомендую отключить клиентские пушки и завести кастомную мессагу вместо SVC_WEAPONANIM, чтобы нормально работало по сети в режиме наблюдателя.
хотел чтоб в место заряженного выстрела гаусс сам пополнял боезапас, провозился долго, но чет толи я дурак, толи лыжи не едут, анимация spinup перестала проигрыватся, а spin проигрывается но после отпускания кнопки
вот что намудрил
void CGauss::SecondaryAttack()
{
if ( charge == 0 )
{
Думаю, многие замечали, что в какие-то моменты анимация деплоя оружия перестаёт играть при быстрой смене между пушками (на Q) - оружие мгновенно отображается на экране. Проявляется это как в сетевой, так и в одиночной игре. Кто-нибудь копал в эту сторону? Можно ли это стабильно побороть?
Пытался сделать улучшение для пушек , но чет пошло не так
Если в общем то хотел сделать итем при подборе которого на пушке менялась бы бодигруппа магазина на увеличенный и менялось бы максимальное колличество патронов, но при подборе итема ничего не происходит. Просто в пустую исчезает итем и все
код итема
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
};
__________________
И главное, Артём, помни: не ешь желтый снег!
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 ];
Вместо WEAPON_MYWEAPON пишешь, например, WEAPON_MP5. Возможно, указатель получается невалидный. Поищи в коде, где из m_rgpPlayerItems ищутся CBasePlayerItem и сравнивай, в чём разница.
Тема с апгрейдами интересная, к примеру еще как вариант интересно бы сделать акимбо-пушки, но чтобы это было не отдельное оружие которое дается при подборе, а было апгрейдом существующей, а то без тутора Дяди Миши всего 32 слота на пушки, хотя я вроде смог осилить более-менее нормальные акимбо пушки. Из мелочей еще надо сделать какую-то анимацию применения подбора, просто холстер и деплой с новой боди группой если пушки в руках и игрока.
Кстати для акимбо полезная была бы фишка это блендинг анимаций, чтобы при стрельбе из левого пистолета не обрывалась анимация правого, и если правый не стреляет, то он проигрывал idle анимацию вне зависимости от левого пистолета.
Достаю в HUD_WeaponsPostThink состояние клиентской пушки через gEngfuncs.GetViewModel() и меняю там curstate.body. Но отображается изменение несколько позже. Можно ли как-то триггернуть перерисовку?
FreeSlave посылай с сервера в мессаге SVC_WEAPONANIM. Тогда бодя будет меняться не посреди кадра, а в начале. Но если надо менять налету, лучше используй Xash Weapon System с её бодями и скинами.
Добавлено 10-10-2021 в 23:42:
Ещё можешь попробовать менять бодю не в посттчинке, а в HUD_Frame. Теоретически, если операции, что делаются в ItemPreFrame запихать в HUD_Frame, а те, что в ItemPostFrame, оставить в HUD_WeaponsPostThink, это избавит систему оружий от глюков. Но ссылку на инфу о предиктинге можно получить только из HUD_PostRunCmd. Так что проще вообще нафиг вырезать клиентские пушки. От них один геморрой, а лаг в полсекунды при стрельбе не так уж заметен при игре по сети.