|  | Показать все 30 сообщений этой темы на одной странице | 
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- как добавить новый muzzleflash на пушку ? (https://hlfx.ru/forum/showthread.php?threadid=5693)
 как добавить новый muzzleflash на пушку ?
 как добавить новый muzzleflash на пушку ?
здравствуйте как добавить новый muzzleflash на оружие ?
__________________
илья
Проще всего заменить стандартные спрайты. Код рисования маззлфлешей зашит в движок. Но можно сделать темпэнтитями на клиенте. pEfxAPI и сорцы ксашдвижка в помощь.
вот увидил код
	switch( event->event )
	{
	case 5001:
		gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[0], atoi( event->options) );
		break;
	case 5011:
		gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[1], atoi( event->options) );
		break;
	case 5021:
		gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[2], atoi( event->options) );
		break;
	case 5031:
		gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[3], atoi( event->options) );
		break;
	case 5002:
		gEngfuncs.pEfxAPI->R_SparkEffect( (float *)&entity->attachment[0], atoi( event->options), -100, 100 );
		break;
	// Client side sound
	case 5004:		
		gEngfuncs.pfnPlaySoundByNameAtLocation( (char *)event->options, 1.0, (float *)&entity->attachment[0] );
		break;
	default:
		break;
	} 
тут можно добавить новый на основе такого примера
	switch( event->event )
	{
	case 5001:
		gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[0], atoi( event->options) );
		break;
	case 5011:
		gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[1], atoi( event->options) );
		break;
	case 5021:
		gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[2], atoi( event->options) );
		break;
	case 5031:
		gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[3], atoi( event->options) );
		break;
	case 5041:
		gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[4], atoi( event->options) ); <----здесь добавил новый	
		break;
	case 5002:
		gEngfuncs.pEfxAPI->R_SparkEffect( (float *)&entity->attachment[0], atoi( event->options), -100, 100 );
		break;
	// Client side sound
	case 5004:		
		gEngfuncs.pfnPlaySoundByNameAtLocation( (char *)event->options, 1.0, (float *)&entity->attachment[0] );
		break;
	default:
		break;
	}
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
в каком файле та искать ? случайно не в r_misc.cpp а то исходников много и все разные. Может сразу лучше ссылку скинешь по ксашу.
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Преимущество авроры - визуальное редактирование. Но сама система ограничена именно распылением частиц. Если надо делать огонь, дым, пар и прочее, что ставится на карту - она годится. Можно делать эффекты дыма и огня для оружий и проджектайлов. А вот нечто, вроде эффектов из XDM делать не получится - нет функционала. Дописать можно, но скрипты надо будет писать вручную - теряется весь смысл.
На мой взгляд, самая трушная система из XDM 3.0.3.4. Ей нужно добавить гравитацию и коллизию из 3.0.3.8 туда, где по смыслу нужно, и наверное парсер скриптов для погодных эффектов. В принципе, всё.
Ku2zoff ну и плюс Авроры что конфигурация эффектов не зашита в код, в той же Рендерсистем надо каждый раз перекомпиливать клиент, в идеале нормальная система партиклей это РендерСистем конфигурируемая через текстовые файлы как аврора, где можно прописывать разные эффекты и играться их значениями, а в коде где вызывается какой либо эффект, будто выстрел или взрыв или попадание, чтобы была ссылка на этот файл, если стрельба, то какой мазлфлеш спавнить, может еще и дымок в придачу, трасер какой, или может это лазер, со взрывами так же, чтобы сделать более менее нормальный эффект это должна быть комбинация из разных эффектов, сам огонь, дым, осколки и так далее.
Нечто подобное вроде Валве и задумывали с файлами events/.sc, во многих из них код похожий на код из клиента и содержится, пусть и не используется, по сути работа с эффектами сильно упростилась бы если бы код из .sc брался, и можно было в игре через команду перегрузить эти файлы, допустим если альт-табнулся и поменял что-то в файле эффекта.
Еще из эффектов на Сталкер в одном моде интересную фишку делали, мягкие партиклы назывались - если спрайт какого-то эффекта упирался в стену, но он не резко обрезался, при уходе в стену, а его край что в стену уходил плавно прозрачным становился.
Добавлено 12-08-2021 в 18:10:
В параное маззлфлэшы можно авророй делать, я делал, но Элбер сказал, что ему по старинке модельками больше нравится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Порт R_MuzzleFlash из ксашдвижка в клиентку:
| 1 | #include "com_model.h" | 
| 2 | 
| 3 | #define MAX_MUZZLEFLASH		3 | 
| 4 | model_t* cl_sprite_muzzleflash[MAX_MUZZLEFLASH]; | 
| 5 | 
| 6 | void CL_LoadClientSprites(void) | 
| 7 | { | 
| 8 | cl_sprite_muzzleflash[0] = (struct model_s*)gEngfuncs.GetSpritePointer(SPR_Load("sprites/muzzleflash1.spr")); | 
| 9 | cl_sprite_muzzleflash[1] = (struct model_s*)gEngfuncs.GetSpritePointer(SPR_Load("sprites/muzzleflash2.spr")); | 
| 10 | cl_sprite_muzzleflash[2] = (struct model_s*)gEngfuncs.GetSpritePointer(SPR_Load("sprites/muzzleflash3.spr")); | 
| 11 | } | 
| 12 | 
| 13 | void R_MuzzleFlash(const vec3_t pos, int type) | 
| 14 | { | 
| 15 | TEMPENTITY* pTemp; | 
| 16 |   int		index; | 
| 17 |   float		scale; | 
| 18 | 
| 19 | index = (type % 10) % MAX_MUZZLEFLASH; | 
| 20 | scale = (type / 10) * 0.1f; | 
| 21 |   if (scale == 0.0f) scale = 0.5f; | 
| 22 | 
| 23 |   if (!cl_sprite_muzzleflash[index]) | 
| 24 |     return; | 
| 25 | 
| 26 |   // must set position for right culling on render | 
| 27 |   pTemp = gEngfuncs.pEfxAPI->CL_TempEntAllocHigh((float*)&pos, cl_sprite_muzzleflash[index]); | 
| 28 | if (!pTemp) return; | 
| 29 | pTemp->entity.curstate.rendermode = kRenderTransAdd; | 
| 30 | pTemp->entity.curstate.renderamt = 255; | 
| 31 | pTemp->entity.curstate.framerate = 10; | 
| 32 | pTemp->entity.curstate.renderfx = 0; | 
| 33 |   pTemp->die = gEngfuncs.GetClientTime() + 0.01; // die at next frame | 
| 34 | pTemp->entity.curstate.frame = gEngfuncs.pfnRandomLong(0, pTemp->frameMax); | 
| 35 | pTemp->flags |= FTENT_SPRANIMATE | FTENT_SPRANIMATELOOP; | 
| 36 | pTemp->entity.curstate.scale = scale; | 
| 37 | 
| 38 | if (index == 0) pTemp->entity.angles[2] = gEngfuncs.pfnRandomLong(0, 20); // rifle flash | 
| 39 |     else pTemp->entity.angles[2] = gEngfuncs.pfnRandomLong(0, 359); | 
| 40 | 
| 41 | gEngfuncs.CL_CreateVisibleEntity(ET_TEMPENTITY, &pTemp->entity); | 
| 42 | } | 
Интересно, а насколько сложно сделать чтобы эвенты брались из event/.sc файлов? Все таки это было бы удобно те же эффекты и эвенты оружия можно было бы подправлять не перекомпилируя код.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Chyvachok чтобы выяснить, насколько это сложно, нужно попробовать написать парсер. Мне проще перекомпилить клиент, если что-то получилось не так, чем убивать неделю на написание парсера, я ведь не умею  К тому же, он всё равно будет ограничен заложенным набором функций. Реквестируй фичу кому-нибудь, SNMetamorph'у, например. Он как раз апгрейдит ксашмод. Можно Дядю Мишу попросить о такой штуке для XashNT. Зайчатки скриптовых оружий уже есть в п2, к этой основе можно добавить парсинг клиентского эвента.
 К тому же, он всё равно будет ограничен заложенным набором функций. Реквестируй фичу кому-нибудь, SNMetamorph'у, например. Он как раз апгрейдит ксашмод. Можно Дядю Мишу попросить о такой штуке для XashNT. Зайчатки скриптовых оружий уже есть в п2, к этой основе можно добавить парсинг клиентского эвента.
Что нужно пофиксить насчет muzzleflash - это крепление к аттачменту. Он ведь тупо спавнится в воздухе. Достаточно сделать pTemp->die = cl.time + 1.0 чтобы увидеть это убожество.
Я пока ради теста сделал кой-чего 
| pTemp->clientIndex = 1; | 
| pTemp->flags |= FTENT_SPRANIMATE | FTENT_SPRANIMATELOOP | FTENT_PLYRATTACHMENT; | 
__________________
Мой мод на Xash
[CFR] B@N@N я этим не занимался. Меня устраивает лимит в 500 штук. А что не устраивает - нарисую через триапи. Мешают лимиты - переходи на ксаш или SvenEngine. Последний полностью совместим со стим-версией халфы, имеет увеличенные лимиты, абсолютно бесплатен, т.к. свен бесплатен в стиме. К тому же ещё абсолютно легален. Буржуи не будут на тебя гавкать, если выпустишь свой мод под него. Вот с ксашем ситуация печальная, у них безостановочно горят пуканы из-за копирайтов, хотя казалось бы...
Ксаш не подходит мне так как он не может мультиплеер
А вот свенэнжин наверное да, получше но он только чериз стим и это значит что на пиратку нивстанет и мод соответственно надо будет релизить чериз стим 
Где-то отдельно можно будет скачать свенэнжин ну по типу того как можно скачать Ксаш чьоб не тинуть за собой несколько гига контента?
Насколько там лимиты на темпэнтити отличаются от халфовских? Я думал по хардкору замутить чьоб куски крови, тел, гильзы и тп не исчезали на карте или хотябы их было ощютимо многа чьоб была атмосфера побоища если долго играть на карте, ну типа как в Брутал Думе.
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
| 1 | pTemp->flags |= FTENT_SPRANIMATE | FTENT_SPRANIMATELOOP | [color=red]FTENT_CLIENTCUSTOM[/color]; | 
| 2 | pTemp->entity.curstate.scale = scale; | 
| 3 | 
| 4 | [color = red]pTemp->callback = R_MuzzleFlashCallback;[/color] | 
| 5 | 
| 6 | //================================= | 
| 7 | 
| 8 | [color=red]void R_MuzzleFlashCallback(struct tempent_s* ent, float frametime, float currenttime) | 
| 9 | { | 
| 10 | VectorCopy(gEngfuncs.GetViewModel()->attachment[0], ent->entity.origin); | 
| 11 | }[/color] | 
__________________
Мой мод на Xash
| Временная зона GMT. Текущее время 22:54. | Показать все 30 сообщений этой темы на одной странице | 
  На основе vBulletin версии 2.3.0
  Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
  Дизайн и программирование: Crystice Softworks © 2005 - 2024