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=2747)
Отправлено [)r0n 12-04-2011 в 03:59:
Кастомные декали
Облазил все что мог в поисках ответа как сделать, чтобы декаль зависела от типа материала и ничего не нашел. Может у кого-нибудь есть какие-либо исходники, ссылки, туторы на эту тему? Или может совет какой полезный, кто-нибудь даст, где смотреть и что делать.
Отправлено Ku2zoff 12-04-2011 в 04:18:
[)r0n закомментируй стандартную функцию создания декали на клиенте, ставь декали в EV_HLDM_PlaySound или как его там, где звук попадания пули выбирается в зависимости от материала. Но это только для игрока, для его оружий. У монстров и пулемётов декали ставятся на сервере. Смысл в том, чтобы определить тип материала, лучше это делать на сервере, т.к. для "немировых" энтить можно определить класс и для энтить с CLASS_MACHINE задавать звук металла.
На сервере трейсим энтитю. Если она "мировая", то отправляем на клиент в эвенте или мессагой индекс текстуры. Если "немировая", то в зависимости от класса индекс "мяса" или металла. А на клиенте уже отлавливаем этот индекс и в зависимости от него делаем нужный звук и декаль. Глянь мой тутор "Эффект попадания пуль в стену".
Отправлено [)r0n 12-04-2011 в 21:55:
Есть какие-нибудь исходники, где этот момент уже реализован?
Т.к. моих скромных познаний в С++ явно не хватает.
Отправлено KiQ 13-04-2011 в 04:21:
[)r0n Paranoia?
__________________
-Brain is dead-
Отправлено Ku2zoff 13-04-2011 в 04:51:
KiQ в паранойе декали все одинаковые. Не подойдёт.
Решение простое:
Из EV_HLDM_PlaySound вызвать TraceDecal или как там его для каждого типа текстуры. Ну а в EV_HLDM_FireBullets закомментить TraceDecal.
Отправлено HAWK0044 13-04-2011 в 07:09:
хах , а я сделал
смотри...
вобщем создаём переменную:
char *textype;
в EV_HLDM_PlaySound записываем её , к примеру textype = "metall"
далее есть :
EV_HLDM_DamageDecal( physent_t *pe )
там создаём условия типа:
else if (texmat =="metal")
{
idx = gEngfuncs.pfnRandomLong(1,4);
sprintf(decalname,"{shot_metal%d",idx);
}
вот и всё, ничего сложного
в параное тоже можно , почти так же только не в дэмэйдж декал, а там где вы её рисуете (я рисую из EV_HLDM_GunshotDecalTrace )
там у меня:
CreateDecal(*pTrace,"shot");
только вот тут уже можно так:
char *szDecal;
sprintf(szDecal , "shot_%s" , textype);
в итоге создаём новые группы декалей в decallist.txt (или не так) и пишем туда тгашки
Отправлено XaeroX 13-04-2011 в 07:21:
Цитата:
HAWK0044 писал:
else if (texmat =="metal")
В Анапе уже сильно солнышко припекает?__________________
Отправлено HAWK0044 13-04-2011 в 07:37:
да есть такое, просто копировал из своего кода, а там это воричное условие, так что прошу прощения, не заметил. Поправь пожалуйста
C++ Source Code:
1 | if ( pe->classnumber == 1 ) |
3 | idx = gEngfuncs.pfnRandomLong( 0, 2 ); |
4 | sprintf( decalname, "{break%i", idx + 1 ); |
6 | else if ( pe->rendermode != kRenderNormal ) |
8 | sprintf( decalname, "{bproof1" ); |
10 | else if (texmat =="wood") |
13 | idx = gEngfuncs.pfnRandomLong(1,2); |
14 | sprintf(decalname,"{shot_wood%i",idx); |
16 | else if (texmat =="metal") |
18 | idx = gEngfuncs.pfnRandomLong(1,4); |
19 | sprintf(decalname,"{shot_metal%d",idx); |
21 | else if (texmat =="tile") |
23 | idx = gEngfuncs.pfnRandomLong(1,5); |
24 | sprintf(decalname,"{shot%i",idx); |
26 | else if (texmat =="dirt") |
28 | idx = gEngfuncs.pfnRandomLong(1,2); |
29 | sprintf(decalname,"{shot_dirt%i",idx); |
33 | idx = gEngfuncs.pfnRandomLong( 1, 5 ); |
34 | sprintf( decalname, "{shot%i", idx ); |
вот весь код, чтоб не вводить в заблуждение
Отправлено CrazyRussian 13-04-2011 в 07:52:
Видимо очень сильно там солнышко пекет.
Наводящее слово - strcmp
Хотя есть мысль что если у компилятора/линкера(непомню у кого точно) включена настройка "merge duplicated strings" то такое проканает при условии что строки задавать таким способом
C++ Source Code:
знающие - поправьте меня если я не прав, мне самому стало интересно.__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
Отправлено HAWK0044 13-04-2011 в 07:58:
вы объясните мне ,чем так не правильно?! все говорят.а объяснять - не объясняют, к тому же у меня еще с вб привычка так делать и всё отлично(!!!) работает
Отправлено CrazyRussian 13-04-2011 в 08:06:
HAWK0044 ты сравниваешь указатели на строки а не сами строки.
такой метод зафейлиться тут:
C++ Source Code:
2 | strcpy(str,"Boom - это круто! 8-)"); |
3 | if (str == "Boom - это круто! 8-)") |
4 | MessageBox(0,str,"",MB_ICONERROR); |
МессаджБокс никогда не вылезет.__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов
Отправлено fire64 13-04-2011 в 08:15:
Это же вообще не скомпилится.
Добавлено 13-04-2011 в 12:15:
Можно конечно воспользоваться и strcmp, а можно написать и свою функцию
C++ Source Code:
1 | bool isstringmatch( char *pFirst, char *pSecond ) |
3 | if(strlen(pFirst) != strlen(pSecond) ) |
8 | for( int i = 0; i < strlen(pFirst); i++ ) |
10 | if( pFirst[i] != pSecond[i] ) |
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Отправлено XaeroX 13-04-2011 в 08:32:
Цитата:
HAWK0044 писал:
к тому же у меня еще с вб привычка так делать
Цитата:
fire64 писал:
Можно конечно воспользоваться и strcmp, а можно написать и свою функцию
А зачем? Вдобавок код на редкость неоптимальный.__________________
Отправлено Дядя Миша 13-04-2011 в 08:44:
Цитата:
CrazyRussian писал:
включена настройка "merge duplicated strings"
не "merge" а "eliminate". К тому же это касается только констант.
Цитата:
fire64 писал:
Это же вообще не скомпилится.
почему это? вполне себе скомпилится.
вот вам пример кастомного strcmp с защитой от инвалидных строк
C++ Source Code:
1 | int Q_strncmp( const char *s1, const char *s2, int n ) |
7 | if( s2 == NULL ) return 0; |
17 | // strings are equal until end point |
19 | if( c1 != c2 ) return c1 < c2 ? -1 : 1; |
Добавлено 13-04-2011 в 12:44:
fire64 вот это твоё true\false - это ламерство. Ты свою функцию не сможешь заюзать для сортировки строк.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено [)r0n 13-04-2011 в 10:27:
KiQ, ага, paranoia