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 opendesktop.org
Отправлено Ku2zoff 26-09-2021 в 14:35:
Цитата:
FreeSlave писал:
Можно ли это стабильно побороть?
Отключить клиентские пушки, я думаю.
Отправлено hgrunt_2020 30-09-2021 в 10:22:
Пытался сделать улучшение для пушек , но чет пошло не так
Если в общем то хотел сделать итем при подборе которого на пушке менялась бы бодигруппа магазина на увеличенный и менялось бы максимальное колличество патронов, но при подборе итема ничего не происходит. Просто в пустую исчезает итем и все
код итема
C++ Source Code:
1 | class CItem74drum : public CItem |
6 | SET_MODEL(ENT(pev), "models/w_74drum.mdl"); |
11 | PRECACHE_MODEL ("models/w_74drum.mdl"); |
13 | BOOL MyTouch( CBasePlayer *pPlayer ) |
__________________
И главное, Артём, помни: не ешь желтый снег!
Отправлено Ku2zoff 30-09-2021 в 11:03:
hgrunt_2020 так тебе надо заводить переменные в коде пушки или игрока, а не в коде итема. В общих чертах:
C++ Source Code:
1 | BOOL MyTouch( CBasePlayer *pPlayer ) |
3 | if (pPlayer->m_iDrum == 0) |
5 | if (pPlayer->pev->weapons & (1<<WEAPON_MYWEAPON)) |
13 | CMyWeapon::ItemPostFrame |
15 | if (m_pPlayer->m_iDrum == 1) |
16 | pev->body = нужная_бодигруппа; |
Не забывай передавать бодю на клиент в эвентах и указывать в аргументе SendWeaponAnim, если работаешь не под ксашмодом.
Добавлено 30-09-2021 в 18:03:
Этот код годится, если хранить переменную в игроке. Ну мало ли, может у него тоже какие-то свойства меняются. А вот если хранить в пушке, что логичнее, тут немного сложнее:
C++ Source Code:
1 | BOOL MyTouch( CBasePlayer *pPlayer ) |
3 | if (pPlayer->pev->weapons & (1<<WEAPON_MYWEAPON)) |
5 | CMyWeapon *pGun = NULL; |
7 | for ( i = 0 ; i < MAX_ITEM_TYPES ; i++ ) |
9 | if ( pPlayer->m_rgpPlayerItems[ i ] ) |
11 | CBasePlayerItem *pPlayerItem = pPlayer->m_rgpPlayerItems[ i ]; |
14 | pGun = (CMyWeapon*)(pPlayerItem->GetWeaponPtr()); |
18 | if (pGun && pGun->m_iDrum == 0) |
Отправлено 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 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 opendesktop.org
Отправлено Дядя Миша 10-10-2021 в 18:03:
Помню я с этим дерьмом боролся на уровне движка. Вроде даже победил.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'