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

Дата регистрации: Jun 2008
Проживает: (void)
Сообщений: 13
Возраст: 32

Рейтинг



Half-Life (hl 1, cs) определение стен на предмет простреливаемости

Привет всем!!! Я тут первый раз, но с вопросом :{P
Дело в том, что я редактирую(по мере возможностей) YaPB бота и мне нужена ваша помощь в написании кода проверяющего стену на простреливаемость(в зависимости от текущего оружия), дело в том, что сейчас бот определяет только толщену стены (а как всем известно, есть и очень толстые стены, которые простреливаются....) смотря на исходники читов, я нашел для себя примеры, но наталкнулся на вопрос, чем отличается клиентская

C++ Source Code:
struct pmtrace_s *(*PM_TraceLine) (float *start, float *end, int flags, int usehull, int ignore_pe);

от
простой функции TraceLine? (если можно поподробнее...)

Вот код из чита Ecstatic:
C++ Source Code:
1
int __fastcall cAimbot::CanPenetrate( float *start, float *end, int power )
2
{
3
  pmtrace_t* tr = (pmtrace_t*) &pmtrace;
4
 
5
  float view[3];
6
  float dir[3];
7
 
8
  view[0] = end[0] - start[0];
9
  view[1] = end[1] - start[1];
10
  view[2] = end[2] - start[2];
11
 
12
  float length = VectorLength(view);
13
 
14
  dir[0] = view[0] / length;
15
  dir[1] = view[1] / length;
16
  dir[2] = view[2] / length;
17
 
18
  float position[3];
19
  position[0] = start[0];
20
  position[1] = start[1];
21
  position[2] = start[2];
22
  tr->startsolid = true;
23
 
24
  while( power )
25
  {
26
    if( !tr->startsolid )
27
      power--;
28
    tr = oEngFuncs.PM_TraceLine( position, end, PM_TRACELINE_PHYSENTSONLY, 2, -1);
29
 
30
    if( tr->fraction==1.0f )
31
      return 1;
32
    if( tr->allsolid )
33
      return 0;
34
 
35
    position[0] = tr->endpos[0] + dir[0] * 8.0f;
36
    position[1] = tr->endpos[1] + dir[1] * 8.0f;
37
    position[2] = tr->endpos[2] + dir[2] * 8.0f;
38
  }
39
  return 0;
40
}


P.S. Очень надеюсь на вашу помощь

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

Старое сообщение 12-07-2008 20:04
- За что?
 XaeroX
Crystice Softworks

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

Рейтинг



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


Immortal*BLG в чем конкретно заключается вопрос? Лично я в КС играл очень мало, и мне всегда казалось, что простреливаемость прямо зависит от толщины стены (ну и мощности пушки, конечно).

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

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

Старое сообщение 12-07-2008 20:14
-
Immortal*BLG
Новичок

Дата регистрации: Jun 2008
Проживает: (void)
Сообщений: 13
Возраст: 32

Рейтинг



Цитата:
XaeroX писал:
Лично я в КС играл очень мало, и мне всегда казалось, что простреливаемость прямо зависит от толщины стены (ну и мощности пушки, конечно).

Ты не прав если так считаешь, я сам проверял...

Цитата:
XaeroX писал:
в чем конкретно заключается вопрос?

я кинул код CanPenetrate() с чита Ecstatic, мне нужно его переделать с клиентской части на серверную, так как в g_engfuncs нету PM_TraceLine, да и
C++ Source Code:
struct pmtrace_s *(*PM_TraceLine ) (float *start, float *end, int flags, int usehull, int ignore_pe);

отличается от
C++ Source Code:
void (*pfnTraceLine) (const float *v1, const float *v2, int fNoMonsters, edict_t *pentToSkip, TraceResult *ptr);

Отредактировано Immortal*BLG 13-07-2008 в 03:48

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

Старое сообщение 13-07-2008 03:41
- За что?
 XaeroX
Crystice Softworks

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

Рейтинг



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


Замени

C++ Source Code:
tr = oEngFuncs.PM_TraceLine( position, end, PM_TRACELINE_PHYSENTSONLY, 2, -1);

на
C++ Source Code:
UTIL_TraceLine( position, end, ignore_monsters, NULL, &tr);


Что это за хрень:
pmtrace_t* tr = (pmtrace_t*) &pmtrace;
я не понял.
Объяви переменную так:
TraceResult tr;

Ну и вместо "tr->" надо писать "tr.", разумеется.

Если будет работать не очень хорошо, попробуй параметр missile вместо ignore_monsters.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

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

Старое сообщение 13-07-2008 06:38
-
 Дядя Миша
racing for fish

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

Рейтинг



Immortal*BLG ничем не отличается, скажу даже более - это одна и та же функция, вызываемая для клиента и сервера.
Просто вызов выглядит чуть по другому.
flags = fNoMonsters
ignore_pe = pentToSkip (только вместо указателя - индекс)
usehull - подсказка какой хулл юзать, дело в том, что клиент халфы ни сном ни духом о текущем размере хулла на сервере, поэтому приходится ему явно указывать чё каво.
pmtrace_s * = TraceResult
Вроде бы все.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 13-07-2008 06:40
-
Immortal*BLG
Новичок

Дата регистрации: Jun 2008
Проживает: (void)
Сообщений: 13
Возраст: 32

Рейтинг



Ребята, спасибо за отзывы!

вот, Дядя Миша ты прости, но я не допонял, но всеравно правильно ли я сделал?(так не работает...)
(GetEntity () это бот)

C++ Source Code:
1
int __fastcall cAimbot::CanPenetrate( float *start, float *end, int power )
2
{
3
  TraceResult tr;
4
 
5
  float view[3];
6
  float dir[3];
7
 
8
  view[0] = end[0] - start[0];
9
  view[1] = end[1] - start[1];
10
  view[2] = end[2] - start[2];
11
 
12
  float length = VectorLength(view);
13
 
14
  dir[0] = view[0] / length;
15
  dir[1] = view[1] / length;
16
  dir[2] = view[2] / length;
17
 
18
  float position[3];
19
  position[0] = start[0];
20
  position[1] = start[1];
21
  position[2] = start[2];
22
  tr.startsolid = true;
23
 
24
  while( power )
25
  {
26
    if( !tr.startsolid )
27
      power--;
28
    TraceLine( position, end, true, true, GetEntity (), &tr);
29
 
30
    if( tr.fraction==1.0f )
31
      return 1;
32
    if( tr.allsolid )
33
      return 0;
34
 
35
    position[0] = tr.endpos[0] + dir[0] * 8.0f;
36
    position[1] = tr.endpos[1] + dir[1] * 8.0f;
37
    position[2] = tr.endpos[2] + dir[2] * 8.0f;
38
  }
39
  return 0;
40
}

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

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

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

Рейтинг



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


Immortal*BLG на мой вариант это совершенно не похоже, поэтому не комментирую.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

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

Старое сообщение 13-07-2008 07:30
-
 Дядя Миша
racing for fish

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

Рейтинг



Immortal*BLG ignore_monsters это ни разу не булево значение.
Да и вообще нихрена не понятно, что оно у тебя делает.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 13-07-2008 07:37
-
Immortal*BLG
Новичок

Дата регистрации: Jun 2008
Проживает: (void)
Сообщений: 13
Возраст: 32

Рейтинг



C++ Source Code:
void TraceLine (const Vector &start, const Vector &end, bool ignoreMonsters, bool ignoreGlass, edict_t *ignoreEntity, TraceResult *ptr)
{
  TRACE_LINE (start, end, (ignoreMonsters ? TRUE : FALSE) | (ignoreGlass ? 0x100 : 0), ignoreEntity, ptr);
}

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

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

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

Рейтинг



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


Immortal*BLG ну тогда все верно. Должно работать.

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

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

Старое сообщение 13-07-2008 07:53
-
Immortal*BLG
Новичок

Дата регистрации: Jun 2008
Проживает: (void)
Сообщений: 13
Возраст: 32

Рейтинг



Просто я ни разу не видел такого:

C++ Source Code:
tr.startsolid = true;

(я имею ввиду, что обычно такого в коде я не замечал ни где)

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

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

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

Рейтинг



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


Ну попробуй ее убрать

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

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

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

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

Рейтинг



code:
typedef struct { int fAllSolid; // if true, plane is not valid int fStartSolid; // if true, the initial point was in a solid area int fInOpen; int fInWater; float flFraction; // time completed, 1.0 = didn't hit anything vec3_t vecEndPos; // final position float flPlaneDist; vec3_t vecPlaneNormal; // surface normal at impact edict_t *pHit; // entity the surface is on int iHitgroup; // 0 == generic, non zero is specific body part } TraceResult;

Все там есть, про буквы слегка другие

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 13-07-2008 09:55
-
Immortal*BLG
Новичок

Дата регистрации: Jun 2008
Проживает: (void)
Сообщений: 13
Возраст: 32

Рейтинг



Дядя Миша, с fNoMonsters я разобралься, тут получается, что надо поставить PM_TRACELINE_PHYSENTSONLY(которое равно 2), а вот тут можешь поподробнее описать int usehull плз(плоучается мне надо подставить в fNoMonsters это: PM_TRACELINE_PHYSENTSONLY | и usehull(который тоже равен 2))
И в итоге, если я прав должно получиться следующее:

C++ Source Code:
TRACE_LINE (source, dest, PM_TRACELINE_PHYSENTSONLY | 2, GetEntity (), &tr);


P.S. пробовал, не работает...

Отредактировано Immortal*BLG 14-07-2008 в 07:46

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

Старое сообщение 14-07-2008 07:41
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Immortal*BLG PM_TRACELINE_PHYSENTONLY
это флажок для клиентской трасы, на сервере он и не будет работать.
меня больше всего смущает GetEntity в параметре ignore.
Скажи что это код должен делать?
Кстати вот пример удара монтировкой, перенесенной на клиент (точнее вызовы трассы)
http://half-life.ru/forum/showthrea...%F0%EE%E2%EA%E8

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

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

Старое сообщение 14-07-2008 08:17
-
Тема: (Опционально)
Ваш ответ:



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


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

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

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

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

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

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