HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 29 сообщений этой темы на одной странице

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")

В Анапе уже сильно солнышко припекает?

__________________

xaerox on Vivino


Отправлено HAWK0044 13-04-2011 в 07:37:

да есть такое, просто копировал из своего кода, а там это воричное условие, так что прошу прощения, не заметил. Поправь пожалуйста

C++ Source Code:
1
if ( pe->classnumber == 1 )
2
{
3
  idx = gEngfuncs.pfnRandomLong( 0, 2 );
4
  sprintf( decalname, "{break%i", idx + 1 );
5
}
6
else if ( pe->rendermode != kRenderNormal )
7
{
8
  sprintf( decalname, "{bproof1" );
9
}
10
else if (texmat =="wood")
11
{
12
 
13
  idx = gEngfuncs.pfnRandomLong(1,2);
14
  sprintf(decalname,"{shot_wood%i",idx);
15
}
16
else if (texmat =="metal")
17
{
18
  idx = gEngfuncs.pfnRandomLong(1,4);
19
  sprintf(decalname,"{shot_metal%d",idx);
20
}
21
else if (texmat =="tile")
22
{
23
  idx = gEngfuncs.pfnRandomLong(1,5);
24
  sprintf(decalname,"{shot%i",idx);
25
}
26
else if (texmat =="dirt")
27
{
28
  idx = gEngfuncs.pfnRandomLong(1,2);
29
  sprintf(decalname,"{shot_dirt%i",idx);
30
}
31
else
32
{
33
  idx = gEngfuncs.pfnRandomLong( 1, 5 );
34
  sprintf( decalname, "{shot%i", idx );
35
}

вот весь код, чтоб не вводить в заблуждение


Отправлено CrazyRussian 13-04-2011 в 07:52:

Видимо очень сильно там солнышко пекет.
Наводящее слово - strcmp
Хотя есть мысль что если у компилятора/линкера(непомню у кого точно) включена настройка "merge duplicated strings" то такое проканает при условии что строки задавать таким способом

C++ Source Code:
char*name="foo";

знающие - поправьте меня если я не прав, мне самому стало интересно.

__________________
Трагическая новость: Пятеро инженеров Casio умерли от смеха, узнав что Samsung анонсировали часы с заявленным временем работы в 25 часов


Отправлено HAWK0044 13-04-2011 в 07:58:

вы объясните мне ,чем так не правильно?! все говорят.а объяснять - не объясняют, к тому же у меня еще с вб привычка так делать и всё отлично(!!!) работает


Отправлено CrazyRussian 13-04-2011 в 08:06:

HAWK0044 ты сравниваешь указатели на строки а не сами строки.
такой метод зафейлиться тут:

C++ Source Code:
1
char str[64];
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 )
2
{
3
  if(strlen(pFirst) != strlen(pSecond) )
4
  {
5
    return false;
6
  }
7
 
8
  for( int i = 0; i < strlen(pFirst); i++ )
9
  {
10
    if( pFirst[i] != pSecond[i] )
11
    {
12
      return false;
13
    }
14
  }
15
 
16
  return true;
17
}

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


Отправлено XaeroX 13-04-2011 в 08:32:

Цитата:
HAWK0044 писал:
к тому же у меня еще с вб привычка так делать


Цитата:
fire64 писал:
Можно конечно воспользоваться и strcmp, а можно написать и свою функцию

А зачем? Вдобавок код на редкость неоптимальный.

__________________

xaerox on Vivino


Отправлено Дядя Миша 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 )
2
{
3
  int		c1, c2;
4
 
5
  if( s1 == NULL )
6
  {
7
    if( s2 == NULL ) return 0;
8
    else return -1;
9
  }
10
  else if( s2 == NULL )
11
    return 1;
12
 
13
  do {
14
    c1 = *s1++;
15
    c2 = *s2++;
16
 
17
    // strings are equal until end point
18
    if( !n-- ) return 0;
19
    if( c1 != c2 ) return c1 < c2 ? -1 : 1;
20
 
21
  } while( c1 );
22
 
23
  // strings are equal
24
  return 0;
25
}


Добавлено 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


Временная зона GMT. Текущее время 14:36. Страницы (2): [1] 2 »
Показать все 29 сообщений этой темы на одной странице

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