Я искал весь день об этом, но, похоже, ни один из ответов не помог мне исправить ошибки ...
В настоящее время я делаю DLL на C ++, которая перехватывает EndScene игры,и получает viewmatrix
и переводит на экран ... Весь код в порядке, но кажется, что какая-то переменная все портит ...
Я получаю эти ошибки
Ошибка 1: «LocalPlayer»: необъявленный идентификатор
Ошибка 2: слева от «.flMatrix» должен быть класс / struct / union
Ошибка 3: слева от «.WorldToScreenMatrix» должен быть класс/ struct / union
Вот функция WorldToScreen
:
bool WorldToScreen(float * from, float * to)
{
HWND atual = GetActiveWindow();
RECT m_Rect;
GetWindowRect(atual, &m_Rect);
float w = 0.0f;
to[0] = LocalPlayer.WorldToScreenMatrix.flMatrix[0][0] * from[0] + LocalPlayer.WorldToScreenMatrix.flMatrix[0][1] * from[1] + LocalPlayer.WorldToScreenMatrix.flMatrix[0][2] * from[2] + LocalPlayer.WorldToScreenMatrix.flMatrix[0][3];
to[1] = LocalPlayer.WorldToScreenMatrix.flMatrix[1][0] * from[0] + LocalPlayer.WorldToScreenMatrix.flMatrix[1][1] * from[1] + LocalPlayer.WorldToScreenMatrix.flMatrix[1][2] * from[2] + LocalPlayer.WorldToScreenMatrix.flMatrix[1][3];
w = LocalPlayer.WorldToScreenMatrix.flMatrix[3][0] * from[0] + LocalPlayer.WorldToScreenMatrix.flMatrix[3][1] * from[1] + LocalPlayer.WorldToScreenMatrix.flMatrix[3][2] * from[2] + LocalPlayer.WorldToScreenMatrix.flMatrix[3][3];
if (w < 0.01f)
return false;
float invw = 1.0f / w;
to[0] *= invw;
to[1] *= invw;
int width = (int)(m_Rect.right - m_Rect.left);
int height = (int)(m_Rect.bottom - m_Rect.top);
float x = width / 2;
float y = height / 2;
x += 0.5 * to[0] * width + 0.5;
y -= 0.5 * to[1] * height + 0.5;
to[0] = x + m_Rect.left;
to[1] = y + m_Rect.top;
return true;
}
Ошибка в следующих строках:
to[0] = LocalPlayer.WorldToScreenMatrix.flMatrix[0][0] * from[0] + LocalPlayer.WorldToScreenMatrix.flMatrix[0][1] * from[1] + LocalPlayer.WorldToScreenMatrix.flMatrix[0][2] * from[2] + LocalPlayer.WorldToScreenMatrix.flMatrix[0][3];
to[1] = LocalPlayer.WorldToScreenMatrix.flMatrix[1][0] * from[0] + LocalPlayer.WorldToScreenMatrix.flMatrix[1][1] * from[1] + LocalPlayer.WorldToScreenMatrix.flMatrix[1][2] * from[2] + LocalPlayer.WorldToScreenMatrix.flMatrix[1][3];
w = LocalPlayer.WorldToScreenMatrix.flMatrix[3][0] * from[0] + LocalPlayer.WorldToScreenMatrix.flMatrix[3][1] * from[1] + LocalPlayer.WorldToScreenMatrix.flMatrix[3][2] * from[2] + LocalPlayer.WorldToScreenMatrix.flMatrix[3][3];
Структура LocalPlayer:
struct LocalPlayer
{
DWORD Local;
int Team;
int Health;
WorldToScreenMatrix_t WorldToScreenMatrix;
float* Position;
int Flags;
int CrossHair;
void Read()
{
Local = *(DWORD*)(dwClient + dwLocalPlayer);
if (Local != NULL)
{
Team = *(int*)(Local + dwTeam);
Position = (float*)(Local + dwOrigin);
Health = *(int*)(Local + dwHealth);
CrossHair = *(int*)(Local + dwCrossHairID);
WorldToScreenMatrix = *(WorldToScreenMatrix_t*)(dwEngine + dw_vMatrix);
}
}
}LocalPlayer;
flmatrix включен:
typedef struct
{
float flMatrix[4][4];
}WorldToScreenMatrix_t;
Где возникает ошибка?