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

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- (hl 1, cs) определение стен на предмет простреливаемости (https://hlfx.ru/forum/showthread.php?threadid=1426)


Отправлено Immortal*BLG 12-07-2008 в 20:04:

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. Очень надеюсь на вашу помощь


Отправлено XaeroX 12-07-2008 в 20:14:

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

__________________

xaerox on Vivino


Отправлено Immortal*BLG 13-07-2008 в 03:41:

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


Отправлено XaeroX 13-07-2008 в 06:38:

Замени

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.

__________________

xaerox on Vivino


Отправлено Дядя Миша 13-07-2008 в 06:40:

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'


Отправлено Immortal*BLG 13-07-2008 в 07:21:

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

вот, Дядя Миша ты прости, но я не допонял, но всеравно правильно ли я сделал?(так не работает...)
(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
}


Отправлено XaeroX 13-07-2008 в 07:30:

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

__________________

xaerox on Vivino


Отправлено Дядя Миша 13-07-2008 в 07:37:

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'


Отправлено Immortal*BLG 13-07-2008 в 07:48:

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);
}


Отправлено XaeroX 13-07-2008 в 07:53:

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

__________________

xaerox on Vivino


Отправлено Immortal*BLG 13-07-2008 в 07:58:

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

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

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


Отправлено XaeroX 13-07-2008 в 08:07:

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

__________________

xaerox on Vivino


Отправлено Дядя Миша 13-07-2008 в 09:55:

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'


Отправлено Immortal*BLG 14-07-2008 в 07:41:

Дядя Миша, с 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. пробовал, не работает...


Отправлено Дядя Миша 14-07-2008 в 08:17:

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'


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

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