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:
(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 ) |
3 | pmtrace_t* tr = (pmtrace_t*) &pmtrace; |
8 | view[0] = end[0] - start[0]; |
9 | view[1] = end[1] - start[1]; |
10 | view[2] = end[2] - start[2]; |
12 | float length = VectorLength(view); |
14 | dir[0] = view[0] / length; |
15 | dir[1] = view[1] / length; |
16 | dir[2] = view[2] / length; |
19 | position[0] = start[0]; |
20 | position[1] = start[1]; |
21 | position[2] = start[2]; |
22 | tr->startsolid = true; |
28 | tr = oEngFuncs.PM_TraceLine( position, end, PM_TRACELINE_PHYSENTSONLY, 2, -1); |
30 | if( tr->fraction==1.0f ) |
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; |
P.S. Очень надеюсь на вашу помощь
Отправлено XaeroX 12-07-2008 в 20:14:
Immortal*BLG в чем конкретно заключается вопрос? Лично я в КС играл очень мало, и мне всегда казалось, что простреливаемость прямо зависит от толщины стены (ну и мощности пушки, конечно).
__________________
Отправлено 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.__________________
Отправлено Дядя Миша 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 ) |
8 | view[0] = end[0] - start[0]; |
9 | view[1] = end[1] - start[1]; |
10 | view[2] = end[2] - start[2]; |
12 | float length = VectorLength(view); |
14 | dir[0] = view[0] / length; |
15 | dir[1] = view[1] / length; |
16 | dir[2] = view[2] / length; |
19 | position[0] = start[0]; |
20 | position[1] = start[1]; |
21 | position[2] = start[2]; |
28 | TraceLine( position, end, true, true, GetEntity (), &tr); |
30 | if( tr.fraction==1.0f ) |
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; |
Отправлено XaeroX 13-07-2008 в 07:30:
Immortal*BLG на мой вариант это совершенно не похоже, поэтому не комментирую.
__________________
Отправлено Дядя Миша 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 ну тогда все верно. Должно работать.
__________________
Отправлено Immortal*BLG 13-07-2008 в 07:58:
Просто я ни разу не видел такого:
C++ Source Code:
(я имею ввиду, что обычно такого в коде я не замечал ни где)
Отправлено XaeroX 13-07-2008 в 08:07:
Ну попробуй ее убрать
__________________
Отправлено Дядя Миша 13-07-2008 в 09:55:
Все там есть, про буквы слегка другие __________________
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'