![]() |
Показать все 22 сообщений этой темы на одной странице |
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=5768)
мой туториал про новые мазафлеши
всеем привет знаю тему уже создавал такую но можно еще разок в общем я понял как создать свой mazzleflash на пушку делается это аказываеться легко и просто надо просто создать свой MESSAGE поясню что это вообще такое MESSAGE MESSAGE это с переводу означает сообщение или по иному событие в игре это событие может воспроизводить свои спрайты может воспроизводить свет в игре и многое другое применение сообщений может быть достаточно много. Ладно в общем начнем 1 делом идем в свое оружие
удаляем у него старый mazzleflash он нам не нужен потому что мы будем делать свою вспышку на пушку так что делаем первым делом удаляем это
m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH; ну тут понятно наверное
тааак удалили теперь надо поставить vector vecSrc но со своими параметрами запомните делаем мы все это только в PrimaryAttack
таак ставим
Vector vecSrcMazzle = m_pPlayer->GetGunPosition( ) + gpGlobals->v_forward * 50 + gpGlobals->v_right * 8 + gpGlobals->v_up * -12;
тут все понятно думаю значит что мы сделали мы создали свой вектор специальный вектор который будет идти по координатам от выстрела самого дула пушки то есть если пушка поворачивается то и вектор идет от поворота самого экрана но и сам вектор имеет немного другое название это специально для самой вспышки выстрела поговорим о координатах координаты вам придется здесь ставить свои потому что каждая модель имеет разный размер значит разный размер самого дула пушки гет гун позитион думаю и так понятно что это верно от игрока идет это значение так все это первое что надо добавить в оружие.
идем собственно к самим сообщениям сообщение будет у нас вот такое
MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, vecSrcMazzle );
WRITE_BYTE( TE_SPRITE );<это специально для спрайтов
WRITE_COORD( vecSrcMazzle.x );<-здесь сами вектора для оружия
WRITE_COORD( vecSrcMazzle.y );
WRITE_COORD( vecSrcMazzle.z );
WRITE_SHORT( m_iMazzlePlasma );<-здесь вот здесь как раз и будет наш эффет вспышки или проще говоря активации самого спрайта
WRITE_BYTE( 3 );<-это размер нашего спрайта
WRITE_BYTE( 128 );<это интенсивность кадров чем больше кадров чем четче будет отражаться наш спрайт
MESSAGE_END();<-это конец сообщения тоесть он работает по системно и потом выключается через определённое количество времени где то секунда или меньше
так отлично думаю тут все понятно самое первое значение мне не очень понятно но думаю оно нам не особо нужно главное понять саму суть сообщений. все добавили сообщение теперь главное чтобы сообщение работало стабильно и не вылетали игра его придется поклиентить
это вот так
#ifndef CLIENT_DLL
наши коды
#endif
что значит поклиентить это значит что код будет работать только в client.dll как я понял по названию но в dlls работать не будет это даже +
вообще эта функция очень полезна сам иногда ей пользуюсь помогает очень когда надо писать сложные и долгие коды.
теперь надо прекешнуть наш спрайт тоесть в данном моменте надо прекешнуть вот это m_iMazzlePlasma чтобы он стабильно работал и ошибок не выдавал значит идем в прекеш оружия и там где нибуть ставим вот это m_iMazzlePlasma = PRECACHE_MODEL("sprites/muzzleflashplasma.spr");
думаю тут и так все понятно ну и после таких интересным махинаций у нас получается неплохая вспышка от выстрела оружия не забывайте ставить правильные координаты для vecSrc v_forward v_right v_up
можно даже свой спрайт поставить и будет прикольно так но у этого фокуса есть один небольшой нюанс сама вспышка будет хоть не сильно но отстовать не знаю с чем это связно но такое есть так что имейте в виду что есть минус и идеальный мазл флеш без отставний врядли получиться
да и в hlwe я тоже этот баг с отставания ми заметил
все с вами был илья2 счастливого вам кодописания
и да еще я попозже выложу видео с самой вспышкой ждите скоро будет
Добавлено 18-12-2021 в 21:59:
я извиняюсь конечно моя вина торопился просто. Я забыл что мазафлеш вшит в модель в коде его просто так не удалишь значит делаем вот как скачиваем прогу MDL_tools разархивируем кидаем туда модель де компилируем с помощью decompile_all.bat заходим в qc файл и ищем там вот это { event 5001 0 "любое число" } это и есть сам мазафлеш просто удаляем этот event и компилируем модель с помощью studiomdl.exe все мазафлеш удален.
Добавлено 18-12-2021 в 22:26:
да еще пока я не забыл надо еще int добавить иначе ошибка будет идем в класс оружия где будем сам мазафлеш добавлять и где нибуть там ставим это int m_iMazzlePlasma; m_iMazzlePlasma это пример можно переименовать это как угодно но лучше всего подойдет вот это m_iMazzleFlash так будет более логично.
Добавлено 18-12-2021 в 22:58:
а вот и видео https://youtu.be/6hRi6oTfz-w
__________________
илья
Круто спс. Ток будет отставать от ствола энтот маззл если резко крутить стволом или же дьвигаться вбок
ну да о чем и говорил отстает в принципе это единственный минус в остальном все классно получилось
Добавлено 19-12-2021 в 13:00:
да и в hlwe тоже мазлы отстают я тоже заметил это
__________________
илья
Да, они отстают. А на сервере маззлфлеши делать тоже не выход. Сам пробовал так. Нужно делать на клиенте.
В этом посте
https://hlfx.ru/forum/showthread.ph...5805#post205805
я примерно расписал, как закрепить маззлфлеш на пушке, но это работает только в ксашмоде (нужно затронуть спрайтовый рендер). Если вкратце, то суть в том, чтобы закрепить энтитю маззлфлеша на энтити модели оружия. По тому же принципу, как спрайты крепятся к аттачментам монстров, к примеру (глаз у гарга).
А вообще маззлфлеши отстают даже в ванильной халфе. Если поставить host_framerate поменьше, стрелять и поворачиваться, это очень хорошо видно.
__________________
Мой мод на Xash
А вообще маззлфлеши отстают даже в ванильной халфе:да я тоже это заметил даже без host_framerate отстают но не особо сильно
__________________
илья
В третьем квэйке они на самой модели оружия были если не ошибаюсь. И можно анимацыей включать их тогда точно ни отстаннут
Чтобы кастомные маззлфлеши не отставали от аттачмента, их надо отлавливать в HUD_TempEntUpdate, и обновлять им ориджин каждый кадр. И тогда хоть зарисуйся этих эффектов. Можно приделать не только вспышки выстрелов, но также искры и дым из ствола. Это если дело касается темпэнтить. А если рисовать эффекты средствами TriAPI, их процессинг можно проводить прямо из DrawTransparentTriangles, получив там указатель на вьюмодель, и получив координаты нужного аттачмента.
Добавлено 20-12-2021 в 00:24:
MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, vecSrcMazzle ); |
WRITE_BYTE( TE_SPRITE ); |
__________________
Мой мод на Xash
Если я ничего не путаю, есть функция CL_TentEntAllocCustom, которая позволяет задать темпэнтите произвольный каллбэк. И в этом каллбэке вроде можно обновлять ориджин. То есть отпадает необходимость каким-то особым образом помечать кастомные клиентские маззлфлеши и отлавливать их в HUD_TempEntUpdate. В функции каллбэка достаточно обновлять ориджин.
Добавлено 20-12-2021 в 00:38:
Кстати если речь чисто о серверных "мазлфлешах", то в Инвазионе у СуперГана спрайт рисуется и цепляется к аттачу пушки, чтобы не отставал, но это такое простое решение если не хочется выдумывать.
__________________
Мой мод на Xash
__________________
Мой мод на Xash
Если что вот спрайт из Инвазиона, ставится в код стрельбы:
code:
CSprite *pMuzzle = CSprite::SpriteCreate ( "sprites/plasma/flash.spr", Vector(0,0,0), TRUE ); pMuzzle->SetAttachment ( m_pPlayer->edict(), 1 ); pMuzzle->SetScale ( 0.125 ); pMuzzle->SetTransparency ( kRenderTransAdd, 255, 255, 255, 250, kRenderFxNone ); pMuzzle->SetThink ( &CBaseEntity::SUB_Remove ); pMuzzle->pev->nextthink = gpGlobals->time + 0.075;
Ну так это спрайт крепится к модели игрока, а не к оружию, нет? Я в инвазион не играл, посмотреть бы как оно выглядит. Я делал так же кажется, это не то.
__________________
Мой мод на Xash
Маззлфлэши живут 1 кадр, поэтому никто не парится с их обновлением.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
pTemp->entity.origin = gEngfuncs.GetViewModel()->attachment[0]; |
Ku2zoff ну я и сам сейчас на работе, если только вечером. Если будешь проверять, задай маззлфлешу время die где-то секунду или больше, побегай с ним. У меня вот он намертво прикручен к аттачменту. Интересно, как твой способ сработает.
__________________
Мой мод на Xash
А я послижу за темой
Временная зона GMT. Текущее время 17:58. | Показать все 22 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024