Перейти к содержанию

Структура зомби и проверка на видимость


Рекомендуемые сообщения

Всем привет. Пошел 4 день как я пытаюсь найти структуру зомби в игре Left 4 dead 2.

Она мне нужна для отрисовки зомби(wh). Если есть знающие или те кто уже искал ее то прошу помощи.

 

И еще один вопрос. Для аима мне нужно проверку на видимость зомби. Кто нибудь на форуме ее реализовывал?

Сколько я читал на других форумах все равно не пойму как ее реализовать. Тоже с этим прошу помочь.

Ссылка на комментарий
Поделиться на другие сайты

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

 

Изменено пользователем partoftheworlD
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.