Bo0m21 Опубликовано 5 января, 2017 Поделиться Опубликовано 5 января, 2017 Всем привет. Пошел 4 день как я пытаюсь найти структуру зомби в игре Left 4 dead 2. Она мне нужна для отрисовки зомби(wh). Если есть знающие или те кто уже искал ее то прошу помощи. И еще один вопрос. Для аима мне нужно проверку на видимость зомби. Кто нибудь на форуме ее реализовывал? Сколько я читал на других форумах все равно не пойму как ее реализовать. Тоже с этим прошу помочь. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 5 января, 2017 Поделиться Опубликовано 5 января, 2017 (изменено) 20 часа назад, Bo0m21 сказал: Для аима мне нужно проверку на видимость зомби. Кто нибудь на форуме ее реализовывал? Скрытый текст template<typename Fn> inline Fn GetVirtualFunction(const void* inst, size_t index, size_t offset = 0) { return reinterpret_cast<Fn>(GetVirtualTable(inst, offset)[index]); } void TraceRay(const Ray_t &ray, unsigned int fMask, CTraceFilter *pTraceFilter, trace_t *pTrace) { typedef void(__thiscall* fnOriginal)(PVOID, const Ray_t&, unsigned int, CTraceFilter *, trace_t*); GetVirtualFunction<fnOriginal>(this, 5)(this, ray, fMask, pTraceFilter, pTrace); } void* QueryInterface(std::string szModuleName, std::string szInterfaceName) { typedef void* (*CreateInterfaceFn)(const char* pchName, int* piReturnCode); CreateInterfaceFn hInterface = nullptr; while (!hInterface) { hInterface = (CreateInterfaceFn)GetProcAddress(GetModuleHandleA(szModuleName.c_str()), "CreateInterface"); Sleep(5); } char szBuffer[256]; for (int i = 0; i < 100; i++) { sprintf_s(szBuffer, "%s%0.3d", szInterfaceName.c_str(), i); void* pInterface = hInterface(szBuffer, nullptr); if (pInterface && pInterface != nullptr) break; } return hInterface(szBuffer, nullptr); } g_pEngineTrace = QueryInterface("engine.dll", "EngineTraceClient"); bool IsVisible(Vector& vecStart, Vector& vecEnd, CBaseEntity* pEntity) { IEngineTrace::trace_t tr; IEngineTrace::Ray_t ray; IEngineTrace::CTraceFilter filter; filter.pSkip = g_pEntityList->GetClientEntity(g_pEngine->GetLocalPlayer()); ray.Init(vecStart, vecEnd); g_pEngineTrace->TraceRay(ray, 0x4600400B, &filter, &tr); return (tr.pEntity == pEntity || tr.fraction > 0.99f); } Изменено 5 января, 2017 пользователем partoftheworlD 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения