HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > мой туториал про новые мазафлеши
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
илья2
Житель форума

Группа: Неопытный
Дата регистрации: Mar 2020
Проживает: Волгоград
Сообщений: 381
Возраст: 22

Рейтинг



Wink мой туториал про новые мазафлеши

всеем привет знаю тему уже создавал такую но можно еще разок в общем я понял как создать свой 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

__________________
илья

Отредактировано илья2 18-12-2021 в 19:11

Сообщить модератору | | IP: Записан
Сообщение: 206023

Старое сообщение 18-12-2021 19:58
- За что?
[CFR] B@N@N
Житель форума

Группа: Неопытный
Дата регистрации: Feb 2018
Проживает: Default City
Сообщений: 174
Возраст: 31

Рейтинг



Круто спс. Ток будет отставать от ствола энтот маззл если резко крутить стволом или же дьвигаться вбок

Сообщить модератору | | IP: Записан
Сообщение: 206046

Старое сообщение 19-12-2021 09:51
- За что?
илья2
Житель форума

Группа: Неопытный
Дата регистрации: Mar 2020
Проживает: Волгоград
Сообщений: 381
Возраст: 22

Рейтинг



ну да о чем и говорил отстает в принципе это единственный минус в остальном все классно получилось

Добавлено 19-12-2021 в 13:00:

да и в hlwe тоже мазлы отстают я тоже заметил это

__________________
илья

Сообщить модератору | | IP: Записан
Сообщение: 206047

Старое сообщение 19-12-2021 10:00
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 1006
Возраст: 31

Рейтинг



Да, они отстают. А на сервере маззлфлеши делать тоже не выход. Сам пробовал так. Нужно делать на клиенте.
В этом посте
https://hlfx.ru/forum/showthread.ph...5805#post205805
я примерно расписал, как закрепить маззлфлеш на пушке, но это работает только в ксашмоде (нужно затронуть спрайтовый рендер). Если вкратце, то суть в том, чтобы закрепить энтитю маззлфлеша на энтити модели оружия. По тому же принципу, как спрайты крепятся к аттачментам монстров, к примеру (глаз у гарга).
А вообще маззлфлеши отстают даже в ванильной халфе. Если поставить host_framerate поменьше, стрелять и поворачиваться, это очень хорошо видно.

__________________
Мой мод на Xash

Сообщить модератору | | IP: Записан
Сообщение: 206048

Старое сообщение 19-12-2021 10:06
- За что?
илья2
Житель форума

Группа: Неопытный
Дата регистрации: Mar 2020
Проживает: Волгоград
Сообщений: 381
Возраст: 22

Рейтинг



А вообще маззлфлеши отстают даже в ванильной халфе:да я тоже это заметил даже без host_framerate отстают но не особо сильно

__________________
илья

Сообщить модератору | | IP: Записан
Сообщение: 206049

Старое сообщение 19-12-2021 10:09
- За что?
[CFR] B@N@N
Житель форума

Группа: Неопытный
Дата регистрации: Feb 2018
Проживает: Default City
Сообщений: 174
Возраст: 31

Рейтинг



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

Сообщить модератору | | IP: Записан
Сообщение: 206055

Старое сообщение 19-12-2021 14:59
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Чтобы кастомные маззлфлеши не отставали от аттачмента, их надо отлавливать в HUD_TempEntUpdate, и обновлять им ориджин каждый кадр. И тогда хоть зарисуйся этих эффектов. Можно приделать не только вспышки выстрелов, но также искры и дым из ствола. Это если дело касается темпэнтить. А если рисовать эффекты средствами TriAPI, их процессинг можно проводить прямо из DrawTransparentTriangles, получив там указатель на вьюмодель, и получив координаты нужного аттачмента.

Добавлено 20-12-2021 в 00:24:

Цитата:
илья2 писал:
Vector vecSrcMazzle = m_pPlayer->GetGunPosition( ) + gpGlobals->v_forward * 50 + gpGlobals->v_right * 8 + gpGlobals->v_up * -12;

Неправильный подход. Во-первых, координаты получаем на сервере относительно взгляда игрока, а не относительно аттачмента вьмодели оружия. Во-вторых, координата получена в определённом кадре, и в последующих кадрах маззлфлэш, созданный мессагой
C++ Source Code:
MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, vecSrcMazzle );
WRITE_BYTE( TE_SPRITE );

будет находиться в этих же самых координатах. Игрок сдвинется, вьюмодель сдвинется, а флэш останется в координатах, пришедших с сервера. Такая же проблема есть и для клиентских кастомных маззлфлэшей, созданных с помощью pEfxAPI->R_TempSprite. Как я писал выше, такие темпэнтити необходимо отлавливать и оперативно обновлять им ориджин.

Сообщить модератору | | IP: Записан
Сообщение: 206059

Старое сообщение 19-12-2021 17:24
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 1006
Возраст: 31

Рейтинг



Цитата:
Ku2zoff писал:
необходимо отлавливать и оперативно обновлять им ориджин

Я изначально делал так. Все равно была какая-то проблема. Маззлфлеш был закреплен, но сдвигался при движении игрока. Скажем, если игрок идет вбок, то маззлфлеш будет закреплен, но чуть левее/правее аттачмента. Лучше, конечно, чем ничего. Но все же замута с movetype_follow сработала лучше всех. Нужно только придумать, как закрепить спрайт на аттачменте модели оружия, а не игрока.

__________________
Мой мод на Xash

Сообщить модератору | | IP: Записан
Сообщение: 206060

Старое сообщение 19-12-2021 17:28
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Если я ничего не путаю, есть функция CL_TentEntAllocCustom, которая позволяет задать темпэнтите произвольный каллбэк. И в этом каллбэке вроде можно обновлять ориджин. То есть отпадает необходимость каким-то особым образом помечать кастомные клиентские маззлфлеши и отлавливать их в HUD_TempEntUpdate. В функции каллбэка достаточно обновлять ориджин.

Добавлено 20-12-2021 в 00:38:

Цитата:
Aynekko писал:
но сдвигался при движении игрока

Отставание на один кадр, наверное. Я бы попробовал CL_TentEntAllocCustom. Может поможет. А вообще, лучше написать некое подобие RenderSystem из XDM, и рисовать всё через TriApi. Я делал зажигалку. Так вот, темпэнтити всё равно отставали на кадр. А когда я нарисовал огонёк средствами TriAPI - отставания прекратились.

Добавлено 20-12-2021 в 00:44:

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

Отредактировано Ku2zoff 19-12-2021 в 17:47

Сообщить модератору | | IP: Записан
Сообщение: 206061

Старое сообщение 19-12-2021 17:44
- За что?
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1844

Рейтинг



Кстати если речь чисто о серверных "мазлфлешах", то в Инвазионе у СуперГана спрайт рисуется и цепляется к аттачу пушки, чтобы не отставал, но это такое простое решение если не хочется выдумывать.

Сообщить модератору | | IP: Записан
Сообщение: 206062

Старое сообщение 19-12-2021 18:46
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 1006
Возраст: 31

Рейтинг



Цитата:
Chyvachok писал:
спрайт рисуется и цепляется к аттачу пушки

Я вот такое и сделал у себя на клиенте. На сервере я не понял, как задать аттачмент пушки. Аттачмент игрока - легко.

__________________
Мой мод на Xash

Сообщить модератору | | IP: Записан
Сообщение: 206063

Старое сообщение 19-12-2021 18:50
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Цитата:
Aynekko писал:
На сервере я не понял, как задать аттачмент пушки.

Есть способ. Индекс_энтити | 0xИндексАттачмента. Вроде того. Но это опять же для одного кадра. Если нужно закрепить эффект на аттачменте, чтобы он обновлялся несколько кадров подряд, то лучше это делать на клиенте. Возможно, я вообще перепутал, и такое не прокатит.

Сообщить модератору | | IP: Записан
Сообщение: 206065

Старое сообщение 20-12-2021 00:55
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 1006
Возраст: 31

Рейтинг



Цитата:
Ku2zoff писал:
Индекс_энтити

А какой индекс у вьюмодели? На клиенте показывает, что вьюмодель и игрок имеют одинаковый индекс. Поэтому пришлось заюзать хак и подсунуть -1 в aiment.

__________________
Мой мод на Xash

Сообщить модератору | | IP: Записан
Сообщение: 206067

Старое сообщение 20-12-2021 05:28
- За что?
Chyvachok
Житель форума

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 1844

Рейтинг



Если что вот спрайт из Инвазиона, ставится в код стрельбы:

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;

Сообщить модератору | | IP: Записан
Сообщение: 206068

Старое сообщение 20-12-2021 07:23
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 1006
Возраст: 31

Рейтинг



Ну так это спрайт крепится к модели игрока, а не к оружию, нет? Я в инвазион не играл, посмотреть бы как оно выглядит. Я делал так же кажется, это не то.

__________________
Мой мод на Xash

Сообщить модератору | | IP: Записан
Сообщение: 206069

Старое сообщение 20-12-2021 07:55
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 03:16. Новая тема    Ответить
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > мой туториал про новые мазафлеши
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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