• Объявления

    • Garik66

      Пользователям форума   05.11.2017

      Прошу обратить внимание на эту тему (чтобы увидеть ссылку, войдите в объявление - нажмите на заголовок):   
Bo0m21

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

2 сообщения в этой теме

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

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

 

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

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

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
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

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас