(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 )
Immortal*BLG в чем конкретно заключается вопрос? Лично я в КС играл очень мало, и мне всегда казалось, что простреливаемость прямо зависит от толщины стены (ну и мощности пушки, конечно).
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);
Immortal*BLG ничем не отличается, скажу даже более - это одна и та же функция, вызываемая для клиента и сервера.
Просто вызов выглядит чуть по другому.
flags = fNoMonsters
ignore_pe = pentToSkip (только вместо указателя - индекс)
usehull - подсказка какой хулл юзать, дело в том, что клиент халфы ни сном ни духом о текущем размере хулла на сервере, поэтому приходится ему явно указывать чё каво.
pmtrace_s * = TraceResult
Вроде бы все.
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;
Дядя Миша, с fNoMonsters я разобралься, тут получается, что надо поставить PM_TRACELINE_PHYSENTSONLY(которое равно 2), а вот тут можешь поподробнее описать int usehull плз(плоучается мне надо подставить в fNoMonsters это: PM_TRACELINE_PHYSENTSONLY | и usehull(который тоже равен 2))
И в итоге, если я прав должно получиться следующее:
Immortal*BLG PM_TRACELINE_PHYSENTONLY
это флажок для клиентской трасы, на сервере он и не будет работать.
меня больше всего смущает GetEntity в параметре ignore.
Скажи что это код должен делать?
Кстати вот пример удара монтировкой, перенесенной на клиент (точнее вызовы трассы) http://half-life.ru/forum/showthrea...%F0%EE%E2%EA%E8