как рисовать картинку в имгуи меню? у меня имгуи дх11 киеро хук
как рисовать картинку в имгуи меню? у меня имгуи дх11 киеро хук
Здравствуйте, сделал хук "0x33BA0" (Внешний) отправки пакета серверу, но не пойму, как прочитать агрумент с bitstream
Посмотреть вложение 270028
struct BitStream {
int numberOfBitsUsed;
int numberOfBitsAllocated;
int readOffset;
uint8_t *data;
bool copyData;
uint8_t stackData[256];
};
// int pBitStream - аргумент с твоей функции
auto bitStream = reinterpret_cast<BitStream*>(pBitStream);
Спасибо большое, только ты написал под internal, но попробую её на externalкастишь к указателю на эту структуру и работаешь с ней:C++:struct BitStream { int numberOfBitsUsed; int numberOfBitsAllocated; int readOffset; uint8_t *data; bool copyData; uint8_t stackData[256]; };
C++:// int pBitStream - аргумент с твоей функции auto bitStream = reinterpret_cast<BitStream*>(pBitStream);
(боюсь спросить почему у тебя это внутри фрейма имгуи)
как можно реализовать функцию convertScreenCoordsToWorld3D с луа на плюсы
чат гпт выдовал такой код
но он работает очень плохо и неправильноC++:#include <plugin.h> #include <game_sa/CCamera.h> #include <game_sa/CWorld.h> #include <game_sa/CColPoint.h> bool ConvertScreenCoordsToWorld3D(float screenX, float screenY, float& outX, float& outY, float& outZ) { auto viewMatrix = *(RwMatrix*)0xB6FA2C; CCamera* cam = TheCamera; float screenW = static_cast<float>(*reinterpret_cast<DWORD*>(0xC17044)); float screenH = static_cast<float>(*reinterpret_cast<DWORD*>(0xC17048)); float nx = (2.0f * screenX / screenW) - 1.0f; float ny = 1.0f - (2.0f * screenY / screenH); // перевёрнутый Y CVector forward(viewMatrix.at.x, viewMatrix.at.y, viewMatrix.at.z); CVector right(viewMatrix.right.x, viewMatrix.right.y, viewMatrix.right.z); CVector up(viewMatrix.up.x, viewMatrix.up.y, viewMatrix.up.z); float fov = cam->m_fFOV; float aspect = screenW / screenH; float fovRad = fov * 3.14159f / 180.0f; float tanFov = tanf(fovRad / 2.0f); CVector rayDir = forward + right * nx * aspect * tanFov + up * ny * tanFov; rayDir.Normalise(); CVector camPos = *cam->GetGameCamPosition(); CVector rayEnd = camPos + rayDir * 3000.0f; // дальность луча CColPoint col; CEntity* pHitEntity = nullptr; // трассировка с фильтрацией воды и прочего if (CWorld::ProcessLineOfSight( camPos, rayEnd, col, pHitEntity, true, true, true, true, false, true, false)) { outX = col.m_vecPoint.x; outY = col.m_vecPoint.y; outZ = col.m_vecPoint.z; return true; } return false; }
void CalcScreenCoors(CVector* vecWorld, CVector* vecScreen)
{
D3DXMATRIX m((float*)(0xB6FA2C));
DWORD* dwLenX = (DWORD*)(0xC17044);
DWORD* dwLenY = (DWORD*)(0xC17048);
vecScreen->x = (vecWorld->z * m._31) + (vecWorld->y * m._21) + (vecWorld->x * m._11) + m._41;
vecScreen->y = (vecWorld->z * m._32) + (vecWorld->y * m._22) + (vecWorld->x * m._12) + m._42;
vecScreen->z = (vecWorld->z * m._33) + (vecWorld->y * m._23) + (vecWorld->x * m._13) + m._43;
double fRecip = (double)1.0 / vecScreen->z;
vecScreen->x *= (float)(fRecip * (*dwLenX));
vecScreen->y *= (float)(fRecip * (*dwLenY));
}
void CalcWorldCoors(CVector* vecScreen, CVector* vecWorld)
{
D3DXMATRIXA16 m((float*)(0xB6FA2C));
D3DXMATRIXA16 minv;
memset(&minv, 0, sizeof(D3DXMATRIXA16));
m._44 = 1.0f;
D3DXMatrixInverse(&minv, NULL, &m);
DWORD* dwLenX = (DWORD*)(0xC17044);
DWORD* dwLenY = (DWORD*)(0xC17048);
float fRecip = 1.0f / vecScreen->z;
vecScreen->x /= fRecip * (*dwLenX);
vecScreen->y /= fRecip * (*dwLenY);
vecWorld->x = vecScreen->z * minv._31 + vecScreen->y * minv._21 + vecScreen->x * minv._11 + minv._41;
vecWorld->y = vecScreen->z * minv._32 + vecScreen->y * minv._22 + vecScreen->x * minv._12 + minv._42;
vecWorld->z = vecScreen->z * minv._33 + vecScreen->y * minv._23 + vecScreen->x * minv._13 + minv._43;
}
напрямую с мунлодеракак можно реализовать функцию convertScreenCoordsToWorld3D с луа на плюсы
чат гпт выдовал такой код
но он работает очень плохо и неправильноC++:#include <plugin.h> #include <game_sa/CCamera.h> #include <game_sa/CWorld.h> #include <game_sa/CColPoint.h> bool ConvertScreenCoordsToWorld3D(float screenX, float screenY, float& outX, float& outY, float& outZ) { auto viewMatrix = *(RwMatrix*)0xB6FA2C; CCamera* cam = TheCamera; float screenW = static_cast<float>(*reinterpret_cast<DWORD*>(0xC17044)); float screenH = static_cast<float>(*reinterpret_cast<DWORD*>(0xC17048)); float nx = (2.0f * screenX / screenW) - 1.0f; float ny = 1.0f - (2.0f * screenY / screenH); // перевёрнутый Y CVector forward(viewMatrix.at.x, viewMatrix.at.y, viewMatrix.at.z); CVector right(viewMatrix.right.x, viewMatrix.right.y, viewMatrix.right.z); CVector up(viewMatrix.up.x, viewMatrix.up.y, viewMatrix.up.z); float fov = cam->m_fFOV; float aspect = screenW / screenH; float fovRad = fov * 3.14159f / 180.0f; float tanFov = tanf(fovRad / 2.0f); CVector rayDir = forward + right * nx * aspect * tanFov + up * ny * tanFov; rayDir.Normalise(); CVector camPos = *cam->GetGameCamPosition(); CVector rayEnd = camPos + rayDir * 3000.0f; // дальность луча CColPoint col; CEntity* pHitEntity = nullptr; // трассировка с фильтрацией воды и прочего if (CWorld::ProcessLineOfSight( camPos, rayEnd, col, pHitEntity, true, true, true, true, false, true, false)) { outX = col.m_vecPoint.x; outY = col.m_vecPoint.y; outZ = col.m_vecPoint.z; return true; } return false; }
#include <d3d9.h>
#include <d3dx9.h>
void convertScreenCoordsToWorld3D(float screenX, float screenY, float depth, float* outX, float* outY, float* outZ)
{
static const uintptr_t pGameCamera = 0x0B6F028;
static const uintptr_t pRsGlobal = 0x0C17040;
D3DXMATRIX cameraMatrix;
std::memcpy(&cameraMatrix, reinterpret_cast<void*>(pGameCamera + 0xA04), sizeof(D3DXMATRIX));
cameraMatrix._44 = 1.0f;
D3DXMATRIX inverseMatrix;
if (!D3DXMatrixInverse(&inverseMatrix, nullptr, &cameraMatrix))
return;
int screenWidth = *reinterpret_cast<int*>(pRsGlobal + 4);
int screenHeight = *reinterpret_cast<int*>(pRsGlobal + 8);
if (screenWidth <= 0 || screenHeight <= 0 || depth == 0.0f)
return;
double invDepth = 1.0 / static_cast<double>(depth);
double normX = static_cast<double>(screenX) / (screenWidth * invDepth);
double normY = static_cast<double>(screenY) / (screenHeight * invDepth);
auto dx = static_cast<float>(normX);
auto dy = static_cast<float>(normY);
auto dz = depth;
*outX = inverseMatrix._11 * dx + inverseMatrix._21 * dy + inverseMatrix._31 * dz + inverseMatrix._41;
*outY = inverseMatrix._12 * dx + inverseMatrix._22 * dy + inverseMatrix._32 * dz + inverseMatrix._42;
*outZ = inverseMatrix._13 * dx + inverseMatrix._23 * dy + inverseMatrix._33 * dz + inverseMatrix._43;
}
1>CCoronas.cpp
1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected: No such file or directory,
1>CCover.cpp
1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected: No such file or directory,
1>CCoverPoint.cpp
1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected: No such file or directory,
1>CCredits.cpp
1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected:
Приветствую, пытаюсь собрать plugin-sdk. Возникает такая проблема -
Сборка выполняется на Visual Studio 19Код:1>CCoronas.cpp 1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected: No such file or directory, 1>CCover.cpp 1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected: No such file or directory, 1>CCoverPoint.cpp 1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected: No such file or directory, 1>CCredits.cpp 1>D:\plugin-sdk-master\safetyhook\safetyhook.hpp(38,10): fatal error C1083: Не удается открыть файл включение: expected:
std::expected это часть редакции стандарта C++23 (https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0323r12.html)./std:c++23preview или /std:c++latest (https://learn.microsoft.com/en-us/cpp/build/reference/std-specify-language-standard-version). А для проверке на этапе сборки можно воспользоваться макросом __cpp_lib_expectedhow to get gta cped via sampapi by id
auto* playerPool = samp::RefNetGame()->GetPlayerPool();
playerPool->GetAt(ID)->m_pPlayer->m_pPed; //samp CPed
playerPool->GetAt(ID)->m_pPlayer->m_pPed->m_pGamePed; //GTA CPed
Нужно в каллбеке перед вызовом функции рендера изменять текстурой, а в каллбеке после вызова функции возвращать старую текстурупроблема есть я через RpGeometryForAllMaterials(atomic->geometry, material_callback, veh); крашу текстуру и все норм типо material->color нормально применяется, а если делать material->texture = texture; то в таком случае получается так что применяется на модель, а не на cvehicle и еще оно применяется только при спавне машины после спавна нельзя изменить текстуру. Как это можно исправить?
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"1\"");
// спать 300
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"2\"");
// спать 300
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"3\"");