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

Дата регистрации: Apr 2008
Проживает: (void)
Сообщений: 161

Рейтинг



Кастомные декали

Облазил все что мог в поисках ответа как сделать, чтобы декаль зависела от типа материала и ничего не нашел. Может у кого-нибудь есть какие-либо исходники, ссылки, туторы на эту тему? Или может совет какой полезный, кто-нибудь даст, где смотреть и что делать.

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

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

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

Рейтинг



[)r0n закомментируй стандартную функцию создания декали на клиенте, ставь декали в EV_HLDM_PlaySound или как его там, где звук попадания пули выбирается в зависимости от материала. Но это только для игрока, для его оружий. У монстров и пулемётов декали ставятся на сервере. Смысл в том, чтобы определить тип материала, лучше это делать на сервере, т.к. для "немировых" энтить можно определить класс и для энтить с CLASS_MACHINE задавать звук металла.

На сервере трейсим энтитю. Если она "мировая", то отправляем на клиент в эвенте или мессагой индекс текстуры. Если "немировая", то в зависимости от класса индекс "мяса" или металла. А на клиенте уже отлавливаем этот индекс и в зависимости от него делаем нужный звук и декаль. Глянь мой тутор "Эффект попадания пуль в стену".

Отредактировано Ku2zoff 12-04-2011 в 04:23

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

Старое сообщение 12-04-2011 04:18
- За что?
[)r0n
Житель форума

Дата регистрации: Apr 2008
Проживает: (void)
Сообщений: 161

Рейтинг



Есть какие-нибудь исходники, где этот момент уже реализован?
Т.к. моих скромных познаний в С++ явно не хватает.

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

Старое сообщение 12-04-2011 21:55
- За что?
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2088

Рейтинг



[)r0n Paranoia?

__________________
-Brain is dead-

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

Старое сообщение 13-04-2011 04:21
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

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

Рейтинг



KiQ в паранойе декали все одинаковые. Не подойдёт.

Решение простое:

Из EV_HLDM_PlaySound вызвать TraceDecal или как там его для каждого типа текстуры. Ну а в EV_HLDM_FireBullets закомментить TraceDecal.

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

Старое сообщение 13-04-2011 04:51
- За что?
HAWK0044
Житель форума

Дата регистрации: Oct 2010
Проживает: Анапа
Сообщений: 563
Возраст: 27

Рейтинг



хах , а я сделал
смотри...
вобщем создаём переменную:
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 (или не так) и пишем туда тгашки

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

Старое сообщение 13-04-2011 07:09
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34547
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
HAWK0044 писал:
else if (texmat =="metal")

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

__________________

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

Старое сообщение 13-04-2011 07:21
-
HAWK0044
Житель форума

Дата регистрации: Oct 2010
Проживает: Анапа
Сообщений: 563
Возраст: 27

Рейтинг



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

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
}

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

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

Старое сообщение 13-04-2011 07:37
- За что?
CrazyRussian
ололо

Дата регистрации: Apr 2009
Проживает: Город-курорт Ессентуки
Сообщений: 790
Возраст: 31

Рейтинг



Награды
 
[1 награда]


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

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

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

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

Отредактировано CrazyRussian 13-04-2011 в 07:58

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

Старое сообщение 13-04-2011 07:52
- За что?
HAWK0044
Житель форума

Дата регистрации: Oct 2010
Проживает: Анапа
Сообщений: 563
Возраст: 27

Рейтинг



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

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

Старое сообщение 13-04-2011 07:58
- За что?
CrazyRussian
ололо

Дата регистрации: Apr 2009
Проживает: Город-курорт Ессентуки
Сообщений: 790
Возраст: 31

Рейтинг



Награды
 
[1 награда]


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 часов

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

Старое сообщение 13-04-2011 08:06
- За что?
fire64
Житель форума

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

Рейтинг



Это же вообще не скомпилится.

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

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

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

Старое сообщение 13-04-2011 08:15
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34547
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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


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

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

__________________

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

Старое сообщение 13-04-2011 08:32
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32238
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
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'

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

Старое сообщение 13-04-2011 08:44
-
[)r0n
Житель форума

Дата регистрации: Apr 2008
Проживает: (void)
Сообщений: 161

Рейтинг



KiQ, ага, paranoia

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

Старое сообщение 13-04-2011 10:27
- За что?
Тема: (Опционально)
Ваш ответ:



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


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

Временная зона GMT. Текущее время 07:24. Новая тема    Ответить
Страницы (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